Краткий вопрос про SQL

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Антон Смирнов
Сообщения: 284
Зарегистрирован: 2011.07.08, 10:37
Контактная информация:

Краткий вопрос про SQL

Сообщение Антон Смирнов »

Нужно сделать такой запрос:

Код: Выделить всё

SELECT * FROM table WHERE status=1 AND a IS NOT NULL; 
Пишу так:

Код: Выделить всё

MyModel::find()->where(['status' => 1, 'a' => ['not', ['attribute' => null]]])->all()  
Но Yii2 генерит такой SQL:

Код: Выделить всё

... AND (`a` IN ('not', NULL))... 
Что не так, как нужно. Помогите, как изменить конструкцию?
pavlm
Сообщения: 84
Зарегистрирован: 2013.09.02, 16:33

Re: Краткий вопрос про SQL

Сообщение pavlm »

Код: Выделить всё

->where(['AND', ['status' => 1], ['NOT', ['a' => null]]]);
Аватара пользователя
Антон Смирнов
Сообщения: 284
Зарегистрирован: 2011.07.08, 10:37
Контактная информация:

Re: Краткий вопрос про SQL

Сообщение Антон Смирнов »

Спасибо, есть еще варианты более близкие в оригинальному коду?
pavlm
Сообщения: 84
Зарегистрирован: 2013.09.02, 16:33

Re: Краткий вопрос про SQL

Сообщение pavlm »

если только несколько andWhere подряд, больше не знаю вариантов.
pavlm
Сообщения: 84
Зарегистрирован: 2013.09.02, 16:33

Re: Краткий вопрос про SQL

Сообщение pavlm »

хотя всегда можно написать sql-фрагмент через yii\db\Expression.
еще можно sql-строку передавать в where.
Аватара пользователя
Антон Смирнов
Сообщения: 284
Зарегистрирован: 2011.07.08, 10:37
Контактная информация:

Re: Краткий вопрос про SQL

Сообщение Антон Смирнов »

pavlm писал(а):хотя всегда можно написать sql-фрагмент через yii\db\Expression.
еще можно sql-строку передавать в where.
Ну это уже извращение:)
Аватара пользователя
Антон Смирнов
Сообщения: 284
Зарегистрирован: 2011.07.08, 10:37
Контактная информация:

Re: Краткий вопрос про SQL

Сообщение Антон Смирнов »

pavlm писал(а):

Код: Выделить всё

->where(['AND', ['status' => 1], ['NOT', ['a' => null]]]);
 
Только что проверил, такой запрос генерит следущее:

Код: Выделить всё

...AND (NOT (`a` IS NULL)) 
странновато смотрится по сравнению с

Код: Выделить всё

...a IS NOT NULL
mkramer
Сообщения: 531
Зарегистрирован: 2014.12.14, 13:02

Re: Краткий вопрос про SQL

Сообщение mkramer »

А какая разница как смотрится? На работу это не влияет, а в коде query builder интереснее смотрится.
Ответить