Laravel のクエリビルダで UPSERT を実装する
マイグレーションファイル内で UPSERT を使いたかったが、なさげなので自分で実装した。
public function up()
{
// 多次元配列で UPSERT データを取得
$seeds = $this->getSeedData();
foreach ($seeds as $seed) {
$record = \DB::connection('DB名')->table('テーブル名')->where('id', $seed['id']);
$record->exists() ? $record->update($seed) : $record->insert($seed);
}
}
private function getSeedData()
{
return [
['id' => 1, 'memo' => '腰が'],
['id' => 2, 'memo' => '痛い'],
];
}
Model ファイル内なら
Eloquent でこういうことができるらしい
// User モデル で id = 1 があったら第二引数で UPDATE、なければ第二引数で INSERT
App\User::updateOrCreate(['id' => 1], ['hoge' => 1]);