ちわっす。
今月のブログノルマがギリギリアウト気味のベル子です。
シルバーウィークには青森に行ってきました。
なんと東京のほうが青森より涼しいです!
寒いぞ寒いぞ詐欺ってこういうことだなって思いましたね。
東京って、やっぱ結構、寒いんですよ。
初めて青森に行ったときは、ちょっとふざけてペラペラのコンバースとか履いて行って足が凍傷になりそうになりましたけど、やや厚めのスニーカーくらいなら何とかなります。
真冬の東京の木造アパート、暖房なしのほうがよっぽど寒い自信があります。
何に対抗しているのか分かりませんが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とかになるとすごく気持ちがいいです。
なぜか分かりませんが、重複がなくなったぞーーーーーわーーーやったーーーーどうだーー見たかーーー!
みたいな気持ちになります。
ではでは、また近いうちにっ!