これはすごいですね。
ぜひ読ませていただきます。
これを読んだ人がアプリを作って、その解説記事がまた増えていくと
ユーザが増えてもっと楽しくなるだろうなー。
2008/09/03 0:42 AMUAMU <amu...@gmail.com>:
find() にinclude をセットしないで left join が自動的に行われるってことはないと思いますよ。
railsも同じはず。
動画は編集なのか、開発中のAkelosでのヒトコマだったのかな。
謎ですね。
やっぱり明示的にセットするのが普通ですよね。
ほんと動画は何なんだろう・・・
本家フォーラムの過去ログでも何回も同じような質問が出ているようです。
やっぱり答えは同じようですが、本家フォーラムでinclude使うパターン以外に
$post = $this->post->find($this->params['id']);
$post->comment->load();
なんて回答もありました。→ http://forum.akelos.org/discussion/268/
※自分では試していません。
どちらにしろ動画とは違いますが:-)
あら、チュートリアル作るときに結構見たのに、私も見逃していた・・
動画は編集だったのかー
武田さんの答えで個人的にも、すっきりしました。ありがとうございます。
RailsクローンというAkelosの面を強調するならばload指定をして遅延ロードっぽくするのが正しい気がしますね。
PHPのFramework的には、1行で済む方includeのほうが美しいってイメージがあります。
実務面も気になって、実際にSQLレベルでログを確認してみました。
※includeの場合
SELECT __owner.id AS __owner_id, __owner.title AS __owner_title,
__owner.body AS __owner_body, __owner.updated_at AS
__owner_updated_at, __owner.created_at AS __owner_created_at,
__owner.posted_at AS __owner_posted_at, _comments.id AS _comments_id,
_comments.body AS _comments_body, _comments.post_id AS
_comments_post_id, _comments.updated_at AS _comments_updated_at,
_comments.created_at AS _comments_created_at FROM posts AS __owner
LEFT OUTER JOIN comments AS _comments ON __owner.id =
_comments.post_id WHERE __owner.id = 1
※find & loadの場合
SELECT * FROM posts WHERE posts.id = 1
SELECT * FROM comments WHERE comments.post_id = 1
となります。
どっちも正しいわけですし、どっちを使うかはアプリケーションの実装によったり、SQLサーバによったり、好みの問題なんでしょうけど、find &
load のほうがログレベルでは美しい(見やすい)ですね(^^;