В CakePHP, как я могу найти с условиями в соответствующей области? - PullRequest
1 голос
/ 02 мая 2009

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

Я пытался.

$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 и получать связанные листинги, но затем данные возвращаются в другом формате, и мне нужно повернуть рекурсию вверх, чтобы получить данные из других моих моделей. (И в итоге я получаю дубликаты данных из открытых дверей!). Я могу опубликовать еще несколько примеров кода, если это необходимо.

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

Ответы [ 4 ]

2 голосов
/ 02 мая 2009

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

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

$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')
    )
);
1 голос
/ 02 мая 2009

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

$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'))
        )
    )
)
0 голосов
/ 19 января 2010
$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')
                      )
                             )
)
0 голосов
/ 02 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...