實務上有可能會遇到資料若存在就更新,不存在就塞進去,Laravel提供了好用的方法 updateOrInsert:
表示用A, B, C三個欄位當作條件,如果值存在就更新D欄位的資料,如果不存在就insert一筆新的。
- 與updateOrCreate差別是,updateOrCreate會自動維護created_at, updated_at欄位。
後記
如果有多筆資料要update or insert,上述寫法要foreach,這時可以改用upsert,更有效率:
XXX::upsert($data, ['aa_id', 'bb_id'], ['quantity']);
- 第二個參數放唯一識別key,文件指出要是primary or unique欄位才行,而我這邊是將aa_id與bb_id這兩個欄位group一起設為primary key。
- 最後一個參數則是當key存在時,要更新的欄位。
本筆記參考:
1. https://www.bestinterviewquestion.com/question/how-to-use-updateorinsert-method-in-laravel-query-asogm3909ae
2. https://blog.csdn.net/u010324331/article/details/82698211
3. https://laravel.com/docs/8.x/queries#upserts