0

使用 CakePHP 1.3,我有一个 Find 语句,其中包含 3 级深度关联的条件:Hotel > Room > RoomType > name

我希望我的 Find 语句只返回具有名称“Suite”的 RoomTypes 的酒店。

我相信下面的代码应该可以工作,但它没有,说明 SQL 语法错误:

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

请注意,一家酒店会有很多房间,但每个房间只有 1 个房间类型

我已经阅读了有关在包含语句中使用条件的信息,但这仅限制了返回的 RoomTypes,而不是整个酒店。

我在这里看到过类似的问题,但我还没有找到一个似乎可以解决这个问题的问题。

4

1 回答 1

5

您将需要手动创建连接和条件作为查询的一部分:

$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'
            )
        )
    )
);
于 2011-11-24T09:14:53.107 回答