0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

FuelPHPのORMでリレーションの一括読み込みと遅延読み込みについて。クエリの発行回数は。

Posted at

FuelPHPのORMはテーブル間のリレーションの設定ができますが、
一括読み込み遅延読み込みというのがあって正確に理解して使えてなかったのでメモです。

  • 一括読み込みは、 一部のリレーションは、元の参照で全てフェッチされている。
  • 遅延読み込みは、 明示的にリレーションを要求するまでフェッチされない。
// 一括読み込み。join が使われます:
$post = Model_Post::find('all', array('related' => array('comments')));
// もしくは
$post = Model_Post::query()->related('comments')->get();
// これで $post->comments が使用可能です。これ以上のクエリは発生しません。
// もしくは、遅延読み込みを使用。joinは使われず、一度でも要求したときに改めてクエリが発生します。
// まず "post" を取得。join 無しの 1 クエリ。
$post = Model_Post::find('first');
// ここで (まだロードされていない) コメントを要求すると、 join 無しの別のクエリが自動的に実行されます。
$comments = $post->comments;

今回はサンプルなのでオブジェクトの中身までは記載しませんが、
実際にmodelを取得してvar_dumpなりで出力してみると、一括読み込みの方はオブジェクトにリレーションしたデータが紐づいていました。
遅延読み込みの場合は、参照した時にクエリが別途走りました。

全て一括でフェッチしておくのが正しいとも限らないですが、
relatedに関しては意識して使いたいものだなと思いました。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?