3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Laravel】attachとsyncWithoutDetachingの使い分け

Last updated at Posted at 2022-03-14

この記事は移行しました!最新の内容はこちらをご覧ください😀

はじめに

多対多のリレーションで関連付けたいときはattach!と覚えていたのですが
中間テーブルにユニーク制約を貼ってる場合にattachを連続で実行してしまうとエラーになる。。
(ユニーク制約がなければ同一レコードが複数できる)
うーん、困った。
そんなときはsyncWithoutDetaching を使いましょう。

挙動の違い

  • attach
    • 常にinsert
  • syncWithoutDetaching
    • なければinsert、あれば何もしない

ということで、AとBの関係性が

  • 複数あり得る場合はattach
  • 最大1つの場合はsyncWithoutDetaching

が良いよ!

公式のサンプルではユーザーにロールを与える際にattachをしていますが
一人のユーザーに同じ権限を複数与える(Aさんにadmin権限2個)といったことはないので
syncWithoutDetaching がオススメ。

attachの使い所

  • 買い物カゴに商品を入れる
    • 同じ商品を複数入れる可能性があるため
  • (パッと思い付かないな)

syncWithoutDetachingの使い所

  • 商品をお気に入り登録する
  • ユーザーにロールを与える
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?