Предположим, у нас есть 3 модели, Пользователь, Дом и Профиль со следующими ассоциациями между ними:
- У пользователя есть Дом (Дом принадлежит Пользователю)
- Пользователь имеет профиль (профиль принадлежит пользователю)
Я хотел бы запросить дома (внутри класса HousesController), чьи связанные профили удовлетворяют заданным условиям профиля. Рассмотрим следующий пример:
Предполагая, что пол является свойством модели профиля, я хотел бы получить все дома, владельцем которых является мужчина.
Я нашел этот вопрос, который достаточно близок к тому, что я ищу. В моем случае, отношения между моделями более сложны (дом принадлежит пользователю hasOne Profile), и я не могу заставить его работать. Я пытался что-то вроде этого, без всякой удачи:
$this->House->find('all', array(
'contain' => array(
'User' => array(
'Profile' => array(
'conditions' => array(
'Profile.gender' => 'male'
))))));
Приведенный выше вызов возвращает все дома, и в случае, если пол мужской, он включает в себя соответствующий профиль пользователя. В противном случае профиль пользователя остается пустым. Что именно мне нужно, так это вернуть только домов, владельцем которых является мужчина.
Я на самом деле реализовал это с помощью опции 'joins' функции Model::find()
, но я хотел бы знать, возможно ли это без с использованием 'joins' и если да, то как?