Запрос CakePHP - условный, основанный на поле Container
Я занимаюсь разработкой системы, которая хранит отчеты с компьютеров клиентов и отображает ошибки в списке. Я пытаюсь написать запрос, который находит все системы, которые в настоящее время отказали или имели сбои в прошлом.
Моя модель для Computers
есть поле, которое говорит last_report_pass
это позволяет мне быстро найти компьютеры, которые вышли из строя в текущий день. мой Reports
связаны с идентификатором компьютера и имеет поле с именем 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 Query Builder. Заранее спасибо!
1 ответ
Вам нужно будет использовать matching
его похоже на содержание, но он будет фильтровать по связанным данным:
Будет примерно так
$query->distinct(['Computers.id'])
->matching('Reports', function ($q) {
return $q->where(['Reports.last_report_pass' => 0]);
});
Важно отметить, что вам также придется contain
Reports
таблица, если вам нужно отобразить некоторые данные, которые находятся на этой таблице.