В cakephp, как я могу найти с условиями в соответствующей области?

У меня есть модель (листинга), которая имеет и принадлежит к нескольким различным моделям, я бы хотел найти всю эту модель, где у этой родственной модели (Openhouses) есть условие. В файлах моделей есть «есть и принадлежит». Листинги hasmany Openhouses и Openhouses принадлежат Листингам. (И списки имеют много и blongs к нескольким другим моделям, где я хочу данные.)

Я пытался.

$this->Listing->find('all', array('conditions' => array('Openhouse.date >' => $openhouse_start->format('Ymd H:i:s'), 'Openhouse.date <' => $openhouse_end->format('Ymd H:i:s')) )); 

но безрезультатно.

 Error: 1054: Unknown column 'Openhouse.date' in 'where clause 

Я знаю, что могу искать в модели Openhouse и получать связанные листинги, но затем данные возвращаются в другом формате, и мне нужно повернуть рекурсию, чтобы получить данные из моих других моделей. (И я получаю двойные данные openhouse!). При необходимости я могу опубликовать несколько примеров кода.

Мой вопрос в основном заключается в том, что мне нужно просто запросить модель openhouse и жить с ней или мой синтаксис для неправильной установки условий на соответствующие модели?

Solutions Collecting From Web of "В cakephp, как я могу найти с условиями в соответствующей области?"

Попробуй это:

 $this->List->find('all', array( 'contain' => array( 'Openhouse.conditions' => array( 'Openhouse.date >' => $openhouse_start->format('Ymd H:i:s'), 'Openhouse.date <' => $openhouse_end->format('Ymd H:i:s')) ) ) ) 

Если у вас много связанных моделей, настройки, рекурсивные на 2, могут принести больше данных, чем вы могли бы захотеть.

Если это так, есть альтернатива тому, что сказал маварро, вы также можете попробовать использовать Containable behavior :

 $this->Listing->find ( 'all', array ( 'conditions' => array ( 'Openhouse.date >' => $openhouse_start->format('Ymd H:i:s'), 'Openhouse.date <' => $openhouse_end->format('Ymd H:i:s') ), 'contain' => array('Openhouse') ) ); 

Попробуйте добавить $this->Listing->recursive = 2; перед вызовом, чтобы найти все. Это должно связывать таблицы перед вызовом, давая вам доступ к модели Openhouse из модели листинга.

 $this->List->find('all', array( 'contain' => array( 'conditions' => array( 'Openhouse.date >' => $openhouse_start->format('Ymd H:i:s'), 'Openhouse.date <' => $openhouse_end->format('Ymd H:i:s') ), 'order' => array('Openhouse.date DESC') ) ) )