CSVファイルを基におおよそ1万レコードをDBにドーンとする処理を書いていたら、下記のエラーが。
SQLSTATE[HY000]: General error: 1390 Prepared statement contains too many placeholders in XXX
あっ…(察し)
バインドしすぎってことね。
// 1万分の配列が纏まっている$hogeDataをコレクション化
$collection = collect($hogeData);
// chunk()で1000個ごとに分割する
$hogeData = $collection->chunk(1000);
try {
DB::beginTransaction();
// 1000レコードを約10回インサート
foreach ($hogeData as $value) {
DB::table('hoges')->insert($value->toArray());
}
DB::commit();
return redirect('/hogehoge', 302, [], true)->with('create-success', 'データ登録が完了しました。');
} catch (\Throwable $e) {
DB::rollBack();
Log::error($e->getMessage());
abort(500);
}
こんな感じでコレクション化して1000個ずつ分割したらいけた。
※補足
あと、ドーンってするより適度に分けてやった方が勿論のことはやい。