使用可包含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实现这一点?