色々なモデルからデータを読み込んでViewにセットする
「How to build a “dashboard” for your application in CakePHP」という記事
from nuts and bolts of cakephp
TOP画面などで、例えば新着記事一覧とか、コメント一覧とか、色々なモデルから情報を取得して表示するダッシュボード機能を作りたいときの参考記事。
コントローラから複数のモデルを使う場合、$usesでモデルを指定すると、関係ないアクションまでモデルをロードしてしまって非効率なので、
ClassRegistry::init('Post')->getTop()
というように、必要なアクションの中でのみClassRegistryを使ってモデルのインスタンスを取得してメソッドを実行(ここではPostモデルファイルに記載しているgetTopメソッドを実行)しています。
この記事のコメントの中でApp::importじゃだめなの?というのがあって、それでもいいけど、分かりやすいからClassRegistryの方がいいよって言ってる。まぁ、複数モデルを読み込む場合に、それぞれimportしてnewしてとやるよりは、この1行で済ませた方が分かりやすくてよいかも。
ClassRegistryのAPIドキュメント
http://api.cakephp.org/class_class_registry.html
追記
上記の例だと、PostモデルもしくはAppModelに独自に追加したgetTopメソッドを呼び出しているが、普通にfindやPaginationなどのメソッドは使えます。
$result = ClassRegistry::init('Blog')->find('all');
複数のメソッドを呼び出す場合は、initでオブジェクトのインスタンスがreturnされるので
$obj = ClassRegistry::init('Blog'); $result = $obj->find('all'); $result2 = $obj->find('list');
とすればいいです。