Как в Yii2 сделать условие на несколько параметров одного поля?
Есть вот такой запрос, как его можно перевести на yii2?
SELECT * FROM `work_news` WHERE `text` != ' ' AND `status` != 'wait' AND `status` != 'hide' AND `status` != 'ban';
Поле status - тип enum - содержит show,hide,wait,ban
Собрал вот такой, но status не работает.
$queryNews = (new Query())->select(['*'])
->from('work_news')
->where(['hot_news' => '0'])
->andWhere(['not', ['text' => null, 'status' => ['wait', 'hide', 'ban']]])
->orderBy(['created_date' => SORT_DESC])
->limit(1)
->createCommand()->rawSql;
во первых зачем Вам исключать 3 статуса, если можно просто искать записи с статусом show? во вторых 'text' => null в запросе выше вы проверяете поле на не пустоту, а пустота и NULL это разные значения
спасибо, тоже так думал, но интересно, а если надо исключить 2 параметра статуса из 5?
Сделал так, но работает только с NULL - это правильно?
Создался такой запрос
SELECT * FROM `work_news` WHERE ((`hot_news`='0') AND (`status`='show')) AND (`text` <> 'null') ORDER BY `created_date` DESC LIMIT 1
если нужно исключить несколько тогда нужно использовать конструкцию
->andWhere(['not in', 'status', ['wait', 'hide', 'ban']])
если нужно искать по значению NULL, тогда
->andWhere(['is not', 'text', NULL])
Еще одно уточнение, вы правильно сказали что проверка на NULL и пустоту это разные вещи, а как все такие реализовать проверку на пустоту если поле типа text. SELECT * FROM work_news WHERE `text` IS NOT NULL - все равно отдает результат с пустым полем.