模型:对连接语句应用条件



我想在模型的连接上添加一些条件。

这是我尝试过的,结果没有任何变化:

Members::find('all', [
'fields' => ['name', 'Count(Orders.id)'],
'with' => 'Orders',
// 'joins' => [
//  'Orders' => 'Orders.status = delivered'
// ]
]);

这是我的工作示例查询:

SELECT name, COUNT(orders.id) FROM members
LEFT JOIN orders ON orders.member_id = members.id AND orders.status = 'delivered'
GROUP BY member_id

编辑:

我也根据这个答案尝试了这种方法

$joins = array();
$joins[] = new lithiumdatamodelQuery(array(
'source' => 'orders',
'type' => 'LEFT',
'constraint' => array('Orders.status' => 'delivered'),
));

Members::find('all', [
'fields' => ['name', 'Count(Orders.id)'],
'with' => 'Orders',
'joins' => $joins
]);

但创建的查询不包含定义的联接参数("订单状态"=>"已交付"(

你试图做的事情在概念上是错误的。请尝试将status = 'delivered'放在查询的 where 子句中。有关更多信息,请阅读以下内容:

尽管您正在编写的查询在读取时有意义,并且(可能(产生相同的结果,但您正在混合join clausewhere clause

  • Join clause应包含将两个记录"连接"在一起所需的条件(即相同的名称、相同的first_name和last_name、相同的品牌和型号等(

  • Where clause应包含仅返回满足条件的记录所必需的条件。这些记录可以来自单个表(通常(或多个表(在连接的情况下(。

最新更新