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)
');