Laravel 大量のデータ更新を一回で行う方法 insert

3739 ワード

はじめに

エクセルの表データの一つ一つのセルをDBに保存する際、一つずつ保存していると、大量のクエリが走ることになっておりました。
そのため、一括で保存する流れに変更をしたので、その際の方法を記述しておきます。

元々

foreach($all_data as $data){
	foreath($data as $info) {
	Test::create(xxxx)
	}
}

上記のような形でtestsテーブルにデータを保存していた。
上記の場合、foreachの中にfoeachがあり、DBに書き込む回数が多く、処理が重かった。

変更後

create_data = [];
foreach($all_data as $data){
	foreath($data as $info) {
	$create_data[] = [
	'company' => "$info->company"
	'xxx' => $info->xxx,
	// 左がカラム名、右が入れたいデータを記述
	]
	}
}

DB::table('tests')->insert($data);

上記の記述で、一度配列を作り、その配列を一括でinsertすることで、DBに走るクエリが一回で済む。
よって、保存時の処理が軽くなる。

さいごに

insertで保存すること自体、知らなかったので、とても画期的な方法でした。。
引き続き学んだことを記載してまいります。