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

StackOverflow https://stackoverflow.com/questions/813294

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть модель (листинги), которая имеет несколько разных моделей и принадлежит к ней, я хотел бы найти всю эту модель, в которой есть связанная модель (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 и жить с ней, или мой синтаксис для задания условий на связанные модели неверен?

Это было полезно?

Решение

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

$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, могут принести больше данных, чем вы хотели бы.

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

$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; перед звонком все найти. Этот должен связать таблицы перед вызовом, предоставляя вам доступ к модели 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')
                      )
                             )
)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top