我正在开发一个系统,该系统保存来自客户计算机的报告并在列表中显示故障。我正在尝试编写一个查询来查找当前失败或过去失败的所有系统。
我的Computers
模型有一个字段last_report_pass
,可以让我快速找到当天失败的计算机。我的Reports
与计算机ID相关联,并且有一个名为status
的字段,表示是通过还是失败。
我正在尝试编写一个只显示last_report_pass
为0
或失败的查询,或者如果它有找到并加入的报告(意味着以前的失败),则显示该查询。< / p>
这是我的想法:
$computers = $this->Computers->find('all', [
'conditions' => [
'last_report_pass' => '0',
'COUNT(Reports) NOT' => '0'
],
'contain' => [
'Reports' => [
'conditions' => [
'status' => '0'
]
]
);
我不知道该怎么做。我可以在SQL中写这个,但我想坚持使用Cake的ORM查询生成器。提前谢谢!
答案 0 :(得分:0)
您需要使用matching
它类似于包含,但它将按关联数据进行过滤:
会是这样的
$query->distinct(['Computers.id'])
->matching('Reports', function ($q) {
return $q->where(['Reports.last_report_pass' => 0]);
});
重要的是要注意,如果您需要显示此表中的某些数据,您还必须contain
Reports
表。