多対多リレーションの操作メソッド (attach, sync, syncWithoutDetaching) の違いを整理し、Google Docs やチーム共有資料にもそのまま使えるよう整形したバージョンです👇
✅ Eloquent 多対多リレーション操作の違い(まとめ)
📌 メソッドごとの動作まとめ
メソッド | 動作の内容 |
---|---|
attach() | 指定したIDを中間テーブルに追加。既存データは削除しない。重複は無視される。 |
sync() | 完全に置き換え。指定したIDのみ残し、それ以外の既存データは削除される。 |
syncWithoutDetaching() | 追加のみ。指定したIDを追加するが、既存データはそのまま保持。重複はスルー。 |
🧠 覚えやすいポイント
1. attach()
• ✔ 「追加」だけ
• 削除はされない
• 同じデータを2回追加しても問題なし(重複しない)
2. sync()
• 🔁 「置き換え」
• 渡したID「だけ」を残して、他は削除する
• 今あるデータをすべて上書きしたいときに使う
3. syncWithoutDetaching()
• ➕ 「足りないものを追加」
• 既存のものはそのまま
• 渡したIDがすでにある場合はスルーして追加しない
💡 具体的な使い分け
シーンの例 | 使うメソッド |
---|---|
とにかく必要なデータを追加したいだけ | attach() |
今ある関連をすべて一度リセットして更新したい | sync() |
今ある関連を保ったまま、足りないのだけ追加したい | syncWithoutDetaching() |
✅ まとめイメージ
• 🧩 attach: 今のに足すだけ
• 🔄 sync: 今のを全部入れ替え
• ➕ syncWithoutDetaching: 足りないものを足すだけ(重複は無視)
この表とまとめさえ覚えておけば、**多対多リレーションの操作で迷うことはなし!**💪
他にも detach() や toggle() があるので、必要なら追加説明もできるよ!
コメント