とあるアソシエーションが組まれたModelを使って検索。
その際に条件を付与したかった。
関係についてはこんな感じ。
[Info] <= hasOne <= [Post] => hasMany => [PostItemRelation] <= hasMany <= [Item]
- InfoはPostのidを持っている。
- PostItemRelationはPostとItemのそれぞれのidを紐付けている
って感じですかね。
んで、Postを使って検索しようとしますよね。 そこで、条件を付与してあげたいのです。
<?php $this->Post->find('first', array('conditions' => array('Item.name' => '')));
しかし、これだとエラーが発生します。
どうやら、hasManyの場合は一度に検索をするのではなく、2、3回に別けて検索するようです。 なので、初回の検索queryでエラーが発生するというわけ。
- 最初にPostとInfoを検索(ここではまだItemはでてきていない => エラー!!)
- PostItemRelationを検索
- 最後にItemを検索
じゃあどうしましょうか。動的に追加してあげましょう。
<?php // 動的に追加 $this->Post->hasMany['Item']['conditions'] = array('Item.name' => ''); // 検索 $this->Post->find('first'); // 終わったら戻す(空にする) $this->Post->hasMany['Item']['conditions'] = array();
これでいけます!