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

 

arrow
arrow
    全站熱搜

    dizzy03 發表在 痞客邦 留言(0) 人氣()