Построение условного оператора для нескольких моделей (CakePHP 1.2.5)
Вопрос
Допустим, у меня есть 3 модели: пользователь, регион, страна.
User belongsTo Region
Region belongsTo Country
Каждая из этих моделей использует поведение Containable. Я пытаюсь найти пользователей из страны с кодом «США». Вот что я пытаюсь сделать:
$users = $this->User->find('all', array(
'conditions' => array('Country.code' => 'US'),
'contain' => array('Region.Country'),
));
CakePHP разделяет это на 2 запроса:
<Ол> region.country_id
находится в этом списке ранее идентифицированных идентификаторов страны. В результате в моем приложении возникают ошибки SQL, поскольку мой массив condition
содержит ссылку на Country.code, а второй запрос, который создает Cake, не объединяет страны. р>
Лучшее решение Cake, которое я вижу, - это создать подзапрос, как описано в Сложные условия поиска часть руководства. Тем не менее, это кажется очень запутанным, и это больше взломать, чем я хотел бы реализовать. Есть ли более простой способ, который я пропускаю?
Решение
Нейт Абеле (бывший ведущий разработчик CakePHP) написал статью о специальные объединения , которые могут помочь.
Другие советы
Положите условия в контейнере. Например:
$users = $this->User->find('all', array('contain' => array(
'Region' => array(
'Country' => array(
'conditions' => array('Country.code' => 'US'),
),
),
)));
Посмотрите на второй пример в контейнере руководство