Laravel 12 upsert 踩坑記
Laravel 12 upsert 踩坑記

Laravel 12 upsert 踩坑記

注意事項如下:

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