多対多の関係において、HasManyを使った方法と、BelongsToManyを使った方法の2通りあると思いますが、これらをどのように使い分ければ良いでしょうか?
それぞれ書き方は違うけど出来ることは同じだから好きな方を選べば良いという感じでしょうか?
2通り実装してみましたが、中間テーブルにレコード作成、中間テーブルからレコード削除が問題なく行えました。
以下は、ユーザーが複数の商品をお気に入り登録出来るという前提のモデルです(文字数の都合上、リレーション部分のみを抜粋しています)
①HasManyを使った方法
class User extends Model { public function favorites(): HasMany { return $this->hasMany(Favorite::class); } } class Product extends Model { public function favorites(): HasMany { return $this->hasMany(Favorite::class); } } class Favorite extends Model { public function user() { return $this->belongsTo(User::class); } public function product() { return $this->belongsTo(Product::class); } }
②BelongsToManyを使った方法
class User extends Model { public function products() { return $this->belongsToMany(Product::class); } } class Product extends Model { public function users() { return $this->belongsToMany(User::class); } }
実装してみて思ったことですが、①HasManyを使った方法の方が、中間テーブルに対する操作の自由度が高いように思いました。
こういうケースは、こういう理由から、こっちの方が良い等、アドバイスいただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/23 18:25
2019/01/26 23:18
2019/02/27 17:58