Laravel Bulk Insert & Update

Laravelのversionが低くて、ver.8のupsertみたいな素敵なものがなかった

 Eloquentは使わずに生SQLを書く

対象:Laravel 7以下?(ver.6でやってます)

入力データ

データは一次元配列にさせる必要がある

(こうしないと挿入・更新ロジック時に Array to string conversion が起きる)

foreachやらでよしなに回し、if分で適宜insert用とupdate用に分け、list(配列)に入れる

nullを入れたい場合はnullを記載

$list = [];

$list[index] = sprintf(
  "('%s', null, '%s', '%s')",
     'aaaa',
     'bbbb',
     'cccc'
  );

insert & updateロジック

一意制約になったものが、updateの部分にいく、

VALUES( )でinsert内のものを指定するとupdateされる

\DB::insert('
INSERT INTO
   `TABLE_NAME`
       (name, age, xxx, yyy)
   VALUES '
       .implode(',' $list).'
   ON DUPLICATE KEY UPDATE
       updated_at = VALUES(updated_at)
       ,ZZZ = VALUES(yyy)
');