nanisore oishisou

Webエンジニアあるまさんのゆるふわ奮闘記。

Eager Loadingのつづき

ちわっす。
今月のブログノルマがギリギリアウト気味のベル子です。

シルバーウィークには青森に行ってきました。
なんと東京のほうが青森より涼しいです!
寒いぞ寒いぞ詐欺ってこういうことだなって思いましたね。
東京って、やっぱ結構、寒いんですよ。

初めて青森に行ったときは、ちょっとふざけてペラペラのコンバースとか履いて行って足が凍傷になりそうになりましたけど、やや厚めのスニーカーくらいなら何とかなります。
真冬の東京の木造アパート、暖房なしのほうがよっぽど寒い自信があります。
何に対抗しているのか分かりませんがw

ということで本日もEager Loadingについてです。
先日、リレーションメソッド名にはスネークケース(something_like_this)を使わないほうがよいという話をしたと思うのですが、

> 動的プロパティでアクセスする際はスネークケースでもキャメルケースでもアクセスはできます。

とも書きました。

しかし、本日、実案件でEager Loadする際に気づいたのですが、

モデルで

public function childrenDocs()
    {
        return $this->hasMany('childrenDocs');
    }

このようなリレーションメソッドを定義してコントローラで

$some_models = SomeModel::with('parent.childrenDocs.grandChild')->get();

みたいにネストしてEager Loadして、View側で

@foreach ($some_models as $some_model)
      $some_model->parent->children_docs->grand_child->id
@endforeach

みたいに書くと、parentしかEager Loadしてくれません。

@foreach ($some_models as $some_model)
      $some_model->parent->childrenDocs->grandChild->id
@endforeach

のようにすれば、ちゃんと全てのモデルのデータをEager Loadしてくれます。

ですので、やはりリレーションメソッドは、必ず、キャメルケース(somethingLikeThis)で定義して、キャメルで呼び出すという癖をつけたほうがよさそうです。

まあ、そうだろうね。と思う話だと思うんですが、テーブル名にスネークを使っていたりすると揃えたい気持ちが湧いて、忘れてスネークで書いちゃうんですよね。視認性もいいし。

ということで、Eager Loadingをするときはキャメルケースじゃなきゃ、ダメ、絶対という話でした。


余談ですが、Eager Loadして、100以上のクエリが20とかになるとすごく気持ちがいいです。
なぜか分かりませんが、重複がなくなったぞーーーーーわーーーやったーーーーどうだーー見たかーーー!
みたいな気持ちになります。

ではでは、また近いうちにっ!