Laravel - データベース - UPSERT


 クラウディア


1. 概要
2. UPSERT
3. 参考サイト

1. 概要

 「Laravel」でデータベースに対して、「UPSERT」をかけてみます。

2. UPSERT

 下記のようにテーブルを作成しているとして。

CREATE TABLE users
(
  email VARCHAR(255) NOT NULL
  , name VARCHAR(255) NOT NULL
  , age TINYINT UNSIGNED NOT NULL
  , PRIMARY KEY (email, name)
);
 これに「UPSERT」をかけるには、下記のような構文を用います。

DB::table('users')->upsert(
    [
        [
            'email' => 'test@example.com',
            'name'  => 'Taro',
            'age'   => 30,
        ],
    ],
    ['email'],          // UNIQUE キー
    ['name', 'age']     // 更新対象カラム
);
 「MySQL」上で実際に実行する「SQL」は、下記のものになります。

INSERT INTO users (email, name, age)
VALUES ('test@example.com', 'Taro', 30)
ON DUPLICATE KEY UPDATE
    name = VALUES(name),
    age  = VALUES(age);

3. 参考サイト

 本ページは、「ChatGPT」軍曹を参考にさせていただきました。