Laravel DBのInsert3つ

・配列に入れてまとめてInsert

$value = ['aaa', 'bbb', 'ccc'];
$data = [];

foreach ($value as $item) {
    $data[] = ['param1' => $item, 'param2' => 1, 'param3' => 1];
}
Capsule::table('テーブル名')->Insert($data);
idparam1param2param3
1aaa11
2bbb11
3ccc11

 

・Insertかデータが存在すればUpdateする

firstOrNew([‘カラム’=>’値’])
カラムに指定した値があれば更新なければ作成する

$query = User::firstOrNew(['param1'=>'aaa']);
$query->param2 = aaa;
$query->param3 = aaa;
$query->save();

$query = User::firstOrNew(['param1'=>'ddd']);
$query->param2 = ddd;
$query->param3 = ddd;
$query->save();
idparam1param2param3
1aaa11
2bbb11
3ccc11

idparam1param2param3
1aaaaaaaaa
2bbb11
3ccc11
4ddddddddd

 

・DUPLICATE KEY UPDATE

基本的に上のfirstOrNewと同じだが1度のクエリで実行できる

//入れたいデータ
$datum[] = "('aaa', 100, 2)";
$datum[] = "('bbb', 100, 2)";

//カラム
$column = "(param1, param2, param3)";
//('aaa', 100, 2),('bbb', 100, 2) とカンマ区切りで結合する
$values = implode(',', $datum);
$sql = "INSERT INTO `テーブル名` {$column} VALUES {$values} ON DUPLICATE KEY UPDATE `param1`=VALUES(`param2`), updated_at = NOW()";
DB::statement($sql);

//SQL文
INSERT INTO `テーブル名` (param1, param2, param3) VALUES ('aaa', 100, 2),('bbb', 100, 2) ON DUPLICATE KEY UPDATE `param1`=VALUES(`param2`), updated_at = NOW()
$column = "(param1,

            param2,

            param3)"

 

カラムなどは改行するとエラーになるので注意。