我正在开发一个系统,该系统保存客户的计算机报告并在列表中显示故障。我正在尝试编写一个查询,该查询可以找到过去失败或过去失败的所有系统。
我的Computers
模型具有一个字段,该字段说last_report_pass
,该字段使我能够快速找到当今失败的计算机。我的Reports
与计算机ID相关联,并且具有一个名为status
的字段,该字段说是通过还是失败。
我正在尝试编写一个查询,该查询只会显示last_report_pass
为0
,或者失败,或者如果已找到并加入的报告,则显示它(这意味着先前的失败(。
这是我的想法:
$computers = $this->Computers->find('all', [
'conditions' => [
'last_report_pass' => '0',
'COUNT(Reports) NOT' => '0'
],
'contain' => [
'Reports' => [
'conditions' => [
'status' => '0'
]
]
);
我不知道该怎么办。我可能可以在SQL中写这篇文章,但我正在尝试坚持使用Cake的Orm查询构建器。预先感谢!
您需要使用matching
它的包含类似,但它将通过关联的数据过滤:
这将是这样的东西
$query->distinct(['Computers.id'])
->matching('Reports', function ($q) {
return $q->where(['Reports.last_report_pass' => 0]);
});
重要的是要注意,如果您需要在此表上显示一些数据,也必须使用contain
CC_8表。
参考