【问题标题】:Model: Apply condition on join statements模型:对连接语句应用条件
【发布时间】:2018-09-04 11:43:03
【问题描述】:

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

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

    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

编辑:

我也尝试过这种基于this answer的方法

$joins = array();
$joins[] = new \lithium\data\model\Query(array(
     'source' => 'orders',
     'type' => 'LEFT',
     'constraint' => array('Orders.status' => 'delivered'),
));


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

但创建的查询不包含已定义的连接参数('Orders.status' => 'delivered')

【问题讨论】:

    标签: php lithium


    【解决方案1】:

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

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

    • Join clause 应包含将两条记录“连接”在一起所需的条件(即相同的名称、相同的名字和姓氏、相同的品牌和型号等)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      • 2010-11-04
      • 2012-07-08
      • 2011-11-29
      相关资源
      最近更新 更多