close
Laravel 8.X eloquent終於對大批資料的新增或更新有新的function了
以前需要一筆一筆呼叫firstOrCreate或updateOrCreate,現在可以把多筆資料一次帶入呼叫一次upsert即可。
--
更新插入 - Upsert
有時候,我們可能需要更新現有的 Model,或是當沒有符合的 Model 存在時建立一個新的 Model。與 firstOrCreate 方法類似,updateOrCreate 方法可將 Model 保存在資料庫中,因此我們不需手動呼叫 save 方法。
在下方的範例中,若有 depature 位置為 Oakland 且 destination 位置為 San Diego 的航班,會更新其 price 與 discounted 欄位。若沒有找到符合的航班,則會將第一個引數的陣列與第二個引數的陣列合併,並用來建立一個新的航班:
1$flight = Flight::updateOrCreate(
2 ['departure' => 'Oakland', 'destination' => 'San Diego'],
3 ['price' => 99, 'discounted' => 1]
4);
若想在單一查詢內執行多個「Upsert」,則應使用 upsert 方法作為替代。該方法的第一個引數為用來插入或更新的值,而第二個引數則列出用來在相關資料表上識別出紀錄唯一性的欄位。該方法的第三個與最後一個引數是一組包含欄位的陣列,這些欄位是在資料庫中有相符紀錄時會更新的欄位。若 Model 上有啟用時戳,則 upsert 方法會自動設定 created_at 與 updated_at 時戳:
1Flight::upsert([2 ['departure' => 'Oakland', 'destination' => 'San Diego', 'price' => 99],3 ['departure' => 'Chicago', 'destination' => 'New York', 'price' => 150]4], ['departure', 'destination'], ['price']);
--
https://docs.cornch.dev/zh-tw/laravel/master/eloquent
全站熱搜
留言列表