10
11

More than 1 year has passed since last update.

Laravelで使えるリレーションを図でまとめてみたよ

Last updated at Posted at 2022-10-07

概要

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(タグ);で紐づいているタグの取得が可能。

DBとしての関係性

コード上での紐付き

10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11