Cakephp で、関連フィールドの条件を指定して検索するにはどうすればよいですか?
質問
いくつかの異なるモデルを持ち、それに属するモデル (リスト) を持っています。関連するモデル (オープンハウス) に条件があるすべてのモデルを見つけたいと考えています。「所有者と所属先」はモデル ファイルで設定されます。リスティングには多数のオープンハウスがあり、オープンハウスはリスティングに属します。(そして、リストにはデータが必要な他のいくつかのモデルに関連するものがたくさんあります。)
努力してきました。
$this->Listing->find('all',
array('conditions' =>
array('Openhouse.date >' => $openhouse_start->format('Y-m-d H:i:s'),
'Openhouse.date <' => $openhouse_end->format('Y-m-d H:i:s'))
));
しかし無駄でした。
Error: 1054: Unknown column 'Openhouse.date' in 'where clause
Openhouse モデルで検索して関連するリストを取得できることはわかっていますが、データが別の形式で返されるため、他のモデルからデータを取得するには再帰をかなり高くする必要があります。(そして、オープンハウス データが重複してしまうことになります!)。必要に応じて、さらにいくつかのコード例を投稿できます。
私の質問は基本的に、オープンハウスモデルにクエリを実行してそのまま使用する必要があるのか、それとも関連モデルに条件を設定するための構文が間違っているのかということです。
解決
これを試して:
$this->List->find('all', array(
'contain' => array(
'Openhouse.conditions' => array(
'Openhouse.date >' => $openhouse_start->format('Y-m-d H:i:s'),
'Openhouse.date <' => $openhouse_end->format('Y-m-d H:i:s'))
)
)
)
他のヒント
リンクされたモデルが多数ある場合、再帰的な設定を 2 にすると、必要以上のデータが得られる可能性があります。
それが本当であれば、mavarro が言ったことに代わる方法があります。 抑制可能な動作:
$this->Listing->find
(
'all',
array
(
'conditions' => array
(
'Openhouse.date >' => $openhouse_start->format('Y-m-d H:i:s'),
'Openhouse.date <' => $openhouse_end->format('Y-m-d H:i:s')
),
'contain' => array('Openhouse')
)
);
を追加してみてください$this->Listing->recursive = 2;
すべてを見つけるための呼び出しの前に。それ すべき 呼び出しの前にテーブルをリンクすると、Listing モデルから Openhouse モデルにアクセスできるようになります。
$this->List->find('all', array(
'contain' => array(
'conditions' => array(
'Openhouse.date >' => $openhouse_start->format('Y-m-d H:i:s'),
'Openhouse.date <' => $openhouse_end->format('Y-m-d H:i:s')
),
'order' => array('Openhouse.date DESC')
)
)
)
所属していません StackOverflow