Vapor Trail

明るく楽しく元気よく

Laravel DBのInsert3つ

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

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

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

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

<?php
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();

・DUPLICATE KEY UPDATE

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

<?php
//入れたいデータ
$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', 1002),('bbb', 1002) ON DUPLICATE KEY UPDATE `param1`=VALUES(`param2`), updated_at = NOW()

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