使用可包含cakephp的内部连接

使用可包含cakephp的内部连接,cakephp,join,cakephp-2.3,Cakephp,Join,Cakephp 2.3,我有三张桌子,餐厅,订单,用户。orders表中有餐厅id、状态和用户id字段 restaurant -> hasMany orders orders belogsTo Restaurant orders belongsTo users 我只需要找到那些订单状态为1的餐厅,同时需要获取用户信息 因此,我正在与orders表进行内部联接 $options['joins'] = array( array('table' => 'orders', 'alias'

我有三张桌子,
餐厅
订单
用户
。orders表中有
餐厅id
状态
用户id
字段

restaurant -> hasMany orders
orders belogsTo Restaurant
orders belongsTo users
我只需要找到那些订单状态为1的餐厅,同时需要获取用户信息

因此,我正在与orders表进行内部联接

$options['joins'] = array(
    array('table' => 'orders',
        'alias' => 'Order',
        'type' => 'INNER',
        'conditions' => array(
            'Restaurant.id = Order.restaurant_id',
        )
    )
);
但我如何才能同时获得用户信息,因为根据cake文档,这里允许的参数是
表、别名、类型、条件
。是否有某种方法可以将获取用户信息的sql查询嵌入到最终查询中?是的,另一种选择是编写自定义查询,但是没有办法处理cake

谢谢

更新


在这种情况下,最好的解决方案是编写自定义sql查询。

您是否也尝试了其他连接来获取用户

大概是这样的:

$this->Restaurant->find('all', array(
    'joins' => array(
        array('table' => 'orders',
            'alias' => 'Order',
            'type' => 'INNER',
            'conditions' => array(
                'Restaurant.id = Order.restaurant_id',
                'Order.status = 1'
            )
        ),
        array('table' => 'users',
            'alias' => 'User',
            'type' => 'RIGHT',
            'conditions' => array(
                'Order.user_id = User.id'
            )
    ),

));

注意:我通常认为最简单的方法(对于复杂的查询,您很难理解)是100%用SQL构建查询,并让它按照您的喜好工作,然后用CakePHP重新构建它。

状态为1、餐厅和用户信息的订单列表:

$this->Restaurant->Order->find('all', array('conditions'=>array('Order.status'=>1), 'contain'=>array('Restaurant', 'User')))

但餐厅与用户无关,这是否有效,好的,让我给它一个提示try@Davo是的,但是由于您在第一次联接中与orders表联接,因此您应该能够使用它创建联接。如果不起作用,请返回空。我也是这样做的,所以,这里我应该把连接顺序留给用户,但是如果我在cake中的条件中编写查询,它会抛出一个错误,在SQL中编写您实际需要的查询,并将其包括在内。如何使用paginate实现这一点?