Laravel7 一意制約でない時にのみinsertする方法

一意制約を設定しているテーブルに対して、レコードが存在していない時にinsertして、レコードが存在している時はinsertしないという処理を実装する方法。

とりあえずinsertしてみてtry~catchでスルーをする方法でも良いが、laravelには便利なinsertOrIgnoreメソッドが用意されている。

使い方は、insertメソッドと同じようにコールするだけで、一意制約でない時のみレコードをinsertしてくれるという便利なメソッド。

■通常のinsert
 これだとusersテーブルに同じメールアドレスをinsertすることができる。

$users = User::insert([
    'email' => $email,
]);

■insertOrIgnore
 insertをinsertOrIgnoreに変更するだけ。
 既に同じメールアドレスが存在している時は、何もせずスルーしてくれる。

$users = User::insertOrIgnore([
    'email' => $email,
]);

個人的には、createOrIgnoreメソッドも存在して欲しかったけど、createOrIgnoreメソッドは存在しないらしい。
Google検索のサジェストにcreateOrIgnoreが出てくるから、僕と同じように期待した人も多いのだと思う(笑)

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です