Запрос 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 таблица, если вам нужно отобразить некоторые данные, которые находятся на этой таблице.

Ссылка

Другие вопросы по тегам