概要
Laravelのリレーションに関するドキュメントを図でまとめてみました。
たまに何がなんだったか忘れるので忘備録。
HasOne / BelongsTo
- ユーザー1人対して1つの電話番号が紐づいている
- 紐づくモデルが紐付き先を知っている
HasMany / BelongsTo
- ユーザー1人に対してユーザーの投稿が複数紐づいている
- 紐づくモデルが紐付き先を知っている
BelongsToMany
- ユーザーは複数の権限を所持できる
HasOneThrough
- 整備士と所有者はデータベース内で直接の関係が無いが、整備士から所有者を取得したい場合に定義
HasOneで各モデルを繋げた場合
整備士 -[hasOne]-> 自動車 -[BelongTo]-> 所有者
HasOneThroughで各モデルを繋げた場合
整備士 -[HasOneThrough]-> 所有者
HasManyThrough
MorphTo / MorphOne
- 投稿の画像なのか、ユーザーの画像なのかを「紐付き先タイプ」で判別
- 「紐付き先タイプ」によって紐付き先が「投稿」か「ユーザー」を判別する
morphToMany / morphedByMany
- タグは投稿・または動画に複数紐づく
- 1動画に3タグ
- 1投稿に4タグ など
- 「紐付け先タイプ」によって動画に紐づくか投稿に紐づくかが決まる
図がニュアンス的にちょっと違うかもしれません
Laravel内では$post(投稿)->tags(タグ);で紐づいているタグの取得が可能。