CakePHP查询 - 有条件的基于包含字段
我正在开发一个系统,它保存来自客户计算机的报告并在列表中显示失败。我正试图编写一个查询来查找当前所有失败或失败的系统。CakePHP查询 - 有条件的基于包含字段
我的模型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
Reports
表,如果你需要显示该表上的一些数据。
我尝试使用匹配,它为每个匹配的报告重复计算机。有没有办法做到这一点,所以带有last_report_pass 0的报告包含在子数组中,因为它与常规的包含? –
编辑原文,添加了不同的条款,猜测可能会有效 – diego182
我可能会使用一个计数器缓存来算这些......它会是容易的简单的答案,然后你将存储这将是其他方式方便的在计算机表中报告的数量也许。 –