CakePHP Условия на глубоких модельных ассоциациях
Используя CakePHP 1.3, у меня есть оператор Find с условием глубокой ассоциации 3-го уровня: Hotel > Room > RoomType > name
Я хотел бы, чтобы в моем заявлении "Найти" были возвращены только отели с номерами комнат, которые имеют название "Люкс".
Я считаю, что следующий код должен работать, но это не так, заявив об ошибке синтаксиса SQL:
$this->Hotel->find('first', array(
'contain' => array('Room' => array('RoomType')),
'conditions' => array(
'Hotel.Room.RoomType.name' => 'Suite'
),
));
Обратите внимание, что в отеле будет много номеров, но в каждом номере будет только 1 номер.
Я читал об использовании условия в операторе размещения, но это ограничивает только возвращаемые типы номеров, а не общие отели.
Я видел похожие вопросы, опубликованные здесь, но я не нашел такой, которая, кажется, решает эту проблему.
1 ответ
Решение
Вам нужно будет вручную создать соединения и условия как часть запроса:
$this->Hotel->find('first', array(
'contain'=>array(
'Room'=>array(
'RoomType'
)
),
'joins'=>array(
array(
'table'=>'rooms',
'alias'=>'Room',
'type'=>'inner',
'conditions'=>array(
'Room.hotel_id'=>'Hotel.id'
)
),
array(
'table'=>'room_types',
'alias'=>'RoomType',
'type'=>'inner',
'conditions'=>array(
'RoomType.id'=>'Room.room_type_id',
'RoomType.name=>'Suit'
)
)
)
);