0

CakePHP 1.3を使用して、3レベルの深い関連付けの条件を持つFindステートメントがあります:ホテル>部屋>部屋タイプ>名前

Findステートメントで、名前が「Suite」のRoomTypesのホテルのみを返すようにしたいと思います。

次のコードは機能するはずですが、機能せず、SQL構文エラーが示されています。

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

ホテルには多くの部屋がありますが、各部屋には1つのRoomTypeしかありません。

containsステートメント内での条件の使用について読みましたが、それは返されるRoomTypesのみを制限し、Hotels全体は制限しません。

ここに同様の質問が投稿されていますが、この問題を解決していると思われる質問は見つかりませんでした。

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 に答える