Home > PHP | フレームワーク > CakePHPではまったこと17(belongsTo)

CakePHPではまったこと17(belongsTo)

$belongsToを設定しておけばfindで関連するモデルのデータも取ってきてくれるわけですが。
例えば


class Foo extends AppModel {
   var $name = "Foo";
   var $belongsTo = array('Bar' =>
                     array('className' => 'Bar',
                        'conditions' => '',
                        'order' => '',
                        'fields' => array('hoge'),
                        'foreignKey'=>'bar_id'
                        )
                     );
}

って書いておけばFoosControllerで$this->Foo->findById(‘1’);とかやればidが1のデータと、そのデータ中のbar_idに対応するBarのデータも勝手に取ってきてくれる。(当然Fooはbar_idというフィールドを持つ)
この場合はfieldsを’hoge’に指定しているのでBarのhogeフィールドだけをとって来てくれる。
便利なんだけど常にとってきてしまうので鬱陶しいといえば鬱陶しい。
というわけで
var $recursive = -1;
ってモデルに定義しておけば普段はBarを取ってこない。とって来たいときは


$this->Foo->findAll(array('foofoo' => '1'),  array('id', 'name', 'bar_id'), 'id DESC', 10, 1, 2);

ってやればよい。
最後の引数が$recursiveなんで1でいいんじゃないかと思ったんだけど2じゃないとだめだった。
上記で2番目の引数(fieldsの指定)で’bar_id’を指定しないとなぜかBarのデータを取得できないから要注意。
ちなみに1番目の引数は検索条件(’foofoo’が1のデータを取ってくる)、3番目の引数はオーダー(idで逆順)、4番目は取得数上限、5番目は取得開始ページ(4番目の引数である「取得数上限」単位で区切られる)。
さらに例えばFooのcreatedでソートしたいとき、


$this->Foo->findAll(array('foofoo' => '1'),  array('id', 'name', 'bar_id'), 'created DESC', 10, 1, 2);

ってやると怒られる。Barの’created’と衝突するらしい。そういうわけで


$this->Foo->findAll(array('foofoo' => '1'),  array('id', 'name', 'bar_id'), 'Foo.created DESC', 10, 1, 2);

って書かないといけなかった。

なかなかめんどくさい。

以上

Comments:2

匿名 09-01-05 (月) 17:19

Add Your Comment

クリスタンルブタン 13-07-21 (日) 12:41

コスミー報告書[社外秘] – CakePHPではまったこと17(belongsTo)

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://red-treasure.com/report/wp-trackback.php?p=163
Listed below are links to weblogs that reference
CakePHPではまったこと17(belongsTo) from コスミー報告書[社外秘]

Home > PHP | フレームワーク > CakePHPではまったこと17(belongsTo)

Search
Feeds
Meta
 合計:000854
 今日:0085 昨日:0199

Return to page top