リレーション - 公式Doc読む

これはなに

よむやつ。読むのはこれ

https://readouble.com/laravel/8.x/ja/eloquent-relationships.html

読む

リレーションの定義

  • まずは定義の仕方
    • modelクラス継承して、リレーション貼りたいクラスの名前のメソッドを切る。
    • んでhasOneとかのリレーション定義メソッドを返す。ここでリレーション定義メソッドの引数には関連するモデルクラスの名前を渡す。ModelClass::classでとれるよ
    • 関連先が外部キーとして主キーモデル名_idを持つ前提がある。user_idをpostsTBLが持つみたいなかんじ。
      • ここ単数系のidなんだな
      • オーバーライドもできるらしいが、やらん方がええなあ
  • 逆のリレーションはbelongsTo()
  • デフォルトモデル
    • 関連のテーブルが存在しなかったときの動きを定義する
    • リレーション定義のメソッドにチェインさせて→withDefault()する
      • これで空のリレーション先モデルが返る
    • 返却したい値を指定したい場合は連想配列を引数に渡すか、もしくはクロージャを渡す
      • これクロージャの引数が初めて出る変数だったりしてて、どういう仕組みなんだ? と思うな
  • 最もxxなリレーション先の取得
    • ofMany()をリレーションに定義すると、指定のカラムでソートして一番目のやつ返してくれる
      • これリレーションメソッド以外でも使えるのかな
    • より高度なソートだと、
      • 第一引数にソート順に使いたいカラムの配列
      • 第二引数にクロージャでwhereでの制限
  • Has One Through
    • あるモデルから中間テーブルを超えてその先のモデルまでの一対一を表現する
      • mechanic, car, ownerでmechanicとownerをむすぶみたいなやつ
    • これそんなことせんでもよくね???
      • それぞれとなりのモデルとのリレーションが定義されてたら単にそのリレーションつかって先のやつ取ればいいだけじゃん
      • けどnullの心配しなくて良いのが便利なのかな
    • hasManyThrough
      • も、ある
  • 多対多
    • 中間テーブル作ってbelongsToMany()で定義する
    • 中間テーブルは関連テーブルのアルファベット準備らしい
      • role_userであって逆ではない
      • あと単数でいいのかな
    • 中間モデルは定義しなくて良い
    • 中間テーブルのカラムを取りたいときは、pivotを使う