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 を書きます。