我有一个有效的 SQL 查询,我想知道 CakePHP 查询构建器相当于以完全相同的方式工作吗?
SELECT customers.*, customer_reps.created FROM customers
LEFT JOIN customer_reps ON customer_reps.id =
(
SELECT id FROM customer_reps WHERE customer_id = customers.id
ORDER BY id ASC LIMIT 1
)
WHERE created >= 1475298000
AND created <= 1476217836
AND agents_id = 4
所以本质上我是从“客户”中选择所有列,然后我只想要第一个“customer_reps”表的“创建”时间戳字段来匹配客户。
CakePHP 的文档似乎没有解释如何在 select 中进行选择以进行排序。我尝试使用“hasMany”关系内容,但我无法找到如何获取“第一个”customer_reps 条目以添加到主查询中以在 WHERE 子句中使用。
谢谢
最佳答案
尝试将此代码作为起点,您只需按 CustomerRep.customer_id 将其分组,因为如果您的 customer_reps 表 id 已自动递增,则顺序已经升序
$this->Customer->find('all', array(
'fields' => arrray(
'Customer.*',
'CustomerRep.created'
),
'joins' => array(
array(
'type' => 'LEFT',
'table' => 'customer_reps',
'alias' => 'CustomerRep',
'conditions' => 'Customer.id = CustomerRep.customer_id'
)
)
'conditions' => array(
'Customer.created >=' => '1475298000',
'Customer.created <=' => '1476217836',
'Customer.agentds_id' => 4
),
'group' => 'CustomerRep.customer_id'
));
关于mysql - cakephp 从排序且有限的行加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39986278/