IT-Q

hasMany と belongsTo は、それぞれどちら側に書きますか。

外部キーを持っているテーブル側が belongsTo です。posts に user_id があるなら、User に hasMany、Post に belongsTo を書きます。迷ったらカラムの場所を見ます。

面接官が見ているのはリレーションの向きを理解しているか。

よくある答えと、面談でどう見られるか

  • 外部キーを持たない親側に hasMany、外部キーを持つ子側に belongsTo
    その通りです。posts.user_id があるなら User に hasMany、Post に belongsTo です。
  • 逆で、外部キーを持つ側に hasMany を書く
    逆です。外部キーを持つ側が belongsTo です。
  • どちらに書いても同じで、好みの問題
    生成されるクエリが変わるので同じではありません。
  • 両方のモデルに hasMany を書く
    多対多の場合は両側に belongsToMany を書きますが、1対多では別々です。

模範解答

外部キーがどちらのテーブルにあるかで決まります。posts テーブルに user_id があるなら、

  User モデル: public function posts() { return $this->hasMany(Post::class); }
  Post モデル: public function user()  { return $this->belongsTo(User::class); }

「属している側(外部キーを持つ側)が belongsTo」と覚えると迷いません。多対多の場合は中間テーブルを作り、両側に belongsToMany を書きます。