CakePHP查询 - 基于包含字段的条件

时间:2017-05-27 19:44:01

标签: cakephp associations filtering cakephp-3.0 query-builder

我正在开发一个系统,该系统保存来自客户计算机的报告并在列表中显示故障。我正在尝试编写一个查询来查找当前失败或过去失败的所有系统。

我的Computers模型有一个字段last_report_pass,可以让我快速找到当天失败的计算机。我的Reports与计算机ID相关联,并且有一个名为status的字段,表示是通过还是失败。

我正在尝试编写一个只显示last_report_pass0或失败的查询,或者如果它有找到并加入的报告(意味着以前的失败),则显示该查询。< / p>

这是我的想法:

$computers = $this->Computers->find('all', [
    'conditions' => [
        'last_report_pass' => '0',
        'COUNT(Reports) NOT' => '0'
    ],
    'contain' => [
        'Reports' => [
            'conditions' => [
                'status' => '0'
            ]
        ]
);

我不知道该怎么做。我可以在SQL中写这个,但我想坚持使用Cake的ORM查询生成器。提前谢谢!

1 个答案:

答案 0 :(得分:0)

您需要使用matching 它类似于包含,但它将按关联数据进行过滤:

会是这样的

$query->distinct(['Computers.id'])
    ->matching('Reports', function ($q) {
        return $q->where(['Reports.last_report_pass' => 0]);
    });

重要的是要注意,如果您需要显示此表中的某些数据,您还必须contain Reports表。

Reference