読者です 読者をやめる 読者になる 読者になる

【CakePHP 2.x】Association で連結されるモデル(Model)に order を設定する。

StoreモデルにNewsモデルが紐づく時、
Newsモデルのデータを新着順で取得したい。

以下のように find() しても上手くいかない。

$this->Store->find('first', array('conditions'=>array('Store.id'=>$id), 'order'=>array('News.creation_date'=>'DESC')));

Association は 複数のSQLを実行して
いい感じの配列を返すので、
find() の order に News の order を指定しても
その時点では News を使ったSQLを発行していないのでエラーになる。

なので、find() する直前にStoreモデルの hasManyプロパティ を書き換える。

$this->Store->hasMany['News']['order'] = array('creation_date'=>'DESC');

こうすれば上手く動作する。