Здравствуйте. Когда мы в yii2 оперируем простыми данными то и на выходе все просто. Вот например как вывести только новости имеющие статус опубликован:
$news = News::find();
$news->where(['publish' => 1]);
$data = $news->all();
Можно через andWhere добавить еще и еще условий. Простых.
Но что делать когда условие сложное? В моем случае есть таблица событий, у которой есть даты начала конца. Есть сопутствующая таблица сеансов. И нужно делать фильтрацию событий по дате начала окончания события, но если вдруг в событии есть сеанс, то тогда уже выводить по дате начала и окончания сеанса...
На чистом SQL должно получиться как то так:
(event_seanses IS NULL AND events.start_date <= '2023-02-26' AND events.end_date >= '2023-02-26') OR (event_seanses IS NOT NULL AND event_seances.start <= '2023-02-26' AND event_seances.end >= '2023-02-26')
Напрашивается что-то такое, что конечно же не сработало, потому что как минимум у конструкции ['IS NULL', '{{%eventsSeances}}'] должно быть три параметра...
$res->andWhere(['OR',
[
'AND',
['IS NULL', '{{%eventsSeances}}'],
['<=', '{{%events}}.startAt', $startAt],
],
[
'AND',
['IS NOT NULL', '{{%eventsSeances}}'],
['<=', '{{%eventsSeances}}.startAt', $startAt],
]
]);