CakePHP Условия на глубоких модельных ассоциациях - PullRequest
0 голосов
/ 24 ноября 2011

Используя CakePHP 1.3, у меня есть оператор Find с условием глубокой ассоциации 3-го уровня: Отель> Номер> RoomType> name

Я бы хотел, чтобы в моем заявлении «Поиск» были возвращены только отели с номерами комнат, которые имеют имя «Люкс».

Я считаю, что следующий код должен работать, но это не так, сообщая об ошибке синтаксиса SQL:

$this->Hotel->find('first', array(
    'contain' => array('Room' => array('RoomType')),
    'conditions' => array(
        'Hotel.Room.RoomType.name' => 'Suite' 
    ),
));

Обратите внимание, что в отеле будет много номеров, но в каждом номере будет только 1 номер типа

Я читал об использовании условия в операторе содержимого, но оно ограничивает только возвращаемые типы номеров, а не общие отели.

Я видел похожие вопросы, опубликованные здесь, но я не нашел такой, которая, кажется, решает эту проблему.

1 Ответ

5 голосов
/ 24 ноября 2011

Вам нужно будет вручную создать соединения и условия как часть запроса:

$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'
            )
        )
    )
);
...