IT-Q

中間テーブルに追加の情報(並び順や登録日時など)を持たせたい場合、どうしますか。

belongsToMany に withPivot() で列を指定すれば pivot 経由で読めます。ただし持たせる情報が増えて中間テーブル自体に意味が出てきたら、独立したモデルにする合図です。

面接官が見ているのは中間テーブルの実体を理解しているかの補強。

これは「記事とタグのような多対多を設計するとき、正しいのはどれですか。」への追撃質問です。

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

  • belongsToMany に withPivot() で列を指定する。情報が増えたら独立モデルにする
    その通りです。「単なる紐付け」から「実体」に変わった時が切り替えどきです。
  • 中間テーブルには追加の列を持たせられない
    持たせられます。普通のテーブルです。
  • 記事テーブル側に持たせる
    記事とタグの組み合わせに紐づく情報なので、中間テーブルが正しい置き場所です。
  • JSON カラムにまとめて入れる
    できなくはないですが、検索や集計がしづらくなります。まず列として持たせます。

面接官は何を見ているか

  • withPivot に触れた
  • 中間テーブルも普通のテーブルだと理解している
  • 情報が増えるならモデル化するという判断に触れた

模範解答

belongsToMany に withPivot() で列を指定すれば、pivot 経由で読めます。中間テーブルも普通のテーブルなので、列を足すこと自体は自由です。ただし、持たせる情報が増えて中間テーブル自体に意味が出てきたら、独立したモデルにして hasMany 2本で繋ぎ直す方が扱いやすくなります。「単なる紐付け」から「実体」に変わった時が切り替えどきです。