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
全站熱搜
留言列表