Допустим, у меня есть 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, поскольку мой массив conditions
содержит ссылку на Country.code, а второй запрос, который создает Cake, не объединяет страны.
Лучшее решение Cake, которое я вижу, состоит в создании подзапроса, как описано в Сложных условиях поиска части руководства. Тем не менее, это кажется очень запутанным, и это больше взломать, чем я хотел бы реализовать. Есть ли более простой способ, который я пропускаю?