Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
深层模型关联的CakePHP条件_Cakephp_Cakephp 1.3_Conditional Statements_Contain - Fatal编程技术网

深层模型关联的CakePHP条件

深层模型关联的CakePHP条件,cakephp,cakephp-1.3,conditional-statements,contain,Cakephp,Cakephp 1.3,Conditional Statements,Contain,使用CakePHP 1.3,我有一个Find语句,其中有一个关于3级深度关联的条件: 酒店>房间>房间类型>名称 我希望我的Find声明只返回房间类型为“Suite”的酒店 我相信下面的代码应该可以工作,但它不能工作,说明SQL语法错误: $this->Hotel->find('first', array( 'contain' => array('Room' => array('RoomType')), 'conditions' => array(

使用CakePHP 1.3,我有一个Find语句,其中有一个关于3级深度关联的条件: 酒店>房间>房间类型>名称

我希望我的Find声明只返回房间类型为“Suite”的酒店

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

$this->Hotel->find('first', array(
    'contain' => array('Room' => array('RoomType')),
    'conditions' => array(
        'Hotel.Room.RoomType.name' => 'Suite' 
    ),
));
请注意,一家酒店将有许多房间,但每个房间只有一个房间类型

我已经在contain语句中了解到使用条件的情况,但这只限制返回的房间类型,而不限制整个酒店


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

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

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

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

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

这对我使用cake 2.x很有效,但是我必须将外键关联条件指定为字符串,而不是使用数组语法。因此
'Room.hotel\u id'=>'hotel.id'
变成
'Room.hotel\u id=hotel.id'
这对我使用cake 2.x很有效,但是我必须将外键关联条件指定为字符串,而不是使用数组语法。所以
'Room.hotel\u id'=>'hotel.id'
变成
'Room.hotel\u id=hotel.id'