mk-toolブログスマートフォン用の表示で見るmk-toolブログ2018-06-18【Laravel】Eager-Loadingでlimitを使ってはいけない概要いけないというか、Eager-Loadingでlimitを利用する際は挙動をちゃんと理解していないと思わぬ動作をする。以下のようなテーブルがあった際に、Bookに紐づくChapterをEager-Loadingを利用して、それぞれの本の最後の章を取得したい場合を考える。|------------------------------そのためにまず、Book-Chapterのテーブル結合を行う。limit(1)を付与すれば、各Bookの最終章を取れるのではないか、と考えたのでlimit(1)を付与した。->limit(1);}しかしながら、limit(1)を付与すると3つのBook中2つのBookのlastChapterが空っぽだった。ここで、Eager-Loadingの挙動について調べてみると、Eager-Loadingによりlimit(1)を付与する前のlastChapterは以下のように変換される。DESCなんと、内部的にはjoinしているのではなく、Chaptersのテーブルから含まれるBookのidをIN句で取得していた。各Collectionオブジェクトを結合しているらしい。3つ中2つのBookのlastChapterが空っぽになるというわけだ。Eager-Loadingを利用して最終章以外のデータも取得されてしまうが、それを受け入れて以下のように処理するのが良いだろう。(1)はてなブログをはじめよう!gamushiroSさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。