亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

更新 laravel SQL 表,數值超出范圍:

更新 laravel SQL 表,數值超出范圍:

PHP
Qyouu 2023-08-19 14:30:07
我有一個正在接收傳感器數據的應用程序。作為說明,假設預期范圍在 0.01 到 10 之間。在這種情況下,在遷移中我可能會遇到類似的情況:$table->float('example',5, 2)這樣我就能夠處理超出預期范圍的數量級。然而,傳感器可能會出現故障并發送 10 000 個值。由于傳感器正在發送一系列值,因此可能并非所有數據都不正確,因此最好仍將數據寫入 DB。對于初始插入,我使用下面的代碼,該代碼按預期工作:DB::table($tableName)->insertOrIgnore($insert_array);然而,在某些情況下,傳感器可以重新發送數據,在這種情況下需要更新記錄。超出范圍的值有可能保留在數組中,在這種情況下,下面的更新語句將拋出超出范圍的錯誤:DB::table($tableName)->where('$some_id','=', $another_id)->update($insert_array);我無法找到類似于“updateorignore”功能的東西。處理更新此記錄的最佳方法是什么?請注意,我不能簡單地將其放入 try catch 中,因為該表將是某些子表的父表,并且忽略它會導致一些孤立的條目。
查看完整描述

2 回答

?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

您是否有一些獨特的數據點將記錄連接在一起,例如時間戳或數據來源的 ID?如果是這樣,您可以使用updateOrInsert


DB::table($tableName)

? ? ->updateOrInsert(

? ? ? ? ['remote_id' => $insert_array['remote_id'],

? ? ? ? [

? ? ? ? ? ?'example_field_1' => $insert_array['example_field_1'],

? ? ? ? ? ?'example_field_2' => $insert_array['example_field_2'],

? ? ? ? ]

? ? );

查看完整回答
反對 回復 2023-08-19
?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

以下是解決該問題的一些示例代碼:


                $values = array();

                //set up values for binding to prevent SQL injection

                foreach ($insert_array as $item) {

                        $values[] = '?'; 

                }


                //array values need to be in a "flat array"

                $flat_values = implode(", ", $values);

                

                //add in separators ` to column names

                $columns = implode("`, `",array_keys($insert_array));


                //write sql statement

                $sql = "INSERT IGNORE INTO `example_table` (`$columns`) VALUES 

                ($flat_values) ON DUPLICATE KEY UPDATE id = '$id'";

                DB::insert($sql, array_values($insert_array));

            }


查看完整回答
反對 回復 2023-08-19
  • 2 回答
  • 0 關注
  • 205 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號