注意事項如下:
- 輸入欄位要一致、且需包含所有「非 nullable 或無預設值」欄位
- Laravel 以第一筆資料的鍵名生成 INSERT 欄位清單,後續筆數若少鍵就會爆 SQL 參數錯誤。
- 任何在資料表裡設定為 NOT NULL 且無 DEFAULT 的欄位,都必須在每筆 upsert 資料裡補上,否則 INSERT 時會報 Field X doesn’t have a default value。
- 不會自動處理 created_at/updated_at
- upsert 直接執行原生 SQL,不會幫你自動填 timestamps。
- 若要更新 updated_at,必須在 $updateColumns 陣列裡明確帶上 updated_at,並在資料資料列中補值(例如用 Carbon::now())。