一意制約を設定しているテーブルに対して、レコードが存在していない時に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が出てくるから、僕と同じように期待した人も多いのだと思う(笑)