Сложное условие

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Brainfuck
Сообщения: 161
Зарегистрирован: 2018.02.19, 14:20

Сложное условие

Сообщение Brainfuck » 2018.04.23, 17:20

Как сделать в ActiveRecord что-то вроде $query->where('attr1 != value and attr2 = value') ? Я имею ввиду синтаксис с массивами. Если мне надо только равно я пишу where(['attr' => $value]). Если мне надо только не равно я пишу where(['!=', 'attr', $value]). Но как их объединить?

Аватара пользователя
Alexum
Сообщения: 582
Зарегистрирован: 2016.09.26, 10:00

Re: Сложное условие

Сообщение Alexum » 2018.04.23, 17:31

Есть несколько вариантов. Например, можно использовать методы расширяя запрос ( ->andWhere() , ->orWhere() и т.п.) или внутри одного where собирать сложные запросы используя массивы https://www.yiiframework.com/doc/guide/ ... tor-format .

Brainfuck
Сообщения: 161
Зарегистрирован: 2018.02.19, 14:20

Re: Сложное условие

Сообщение Brainfuck » 2018.04.23, 17:39

Alexum писал(а):
2018.04.23, 17:31
Есть несколько вариантов. Например, можно использовать методы расширяя запрос ( ->andWhere() , ->orWhere() и т.п.) или внутри одного where собирать сложные запросы используя массивы https://www.yiiframework.com/doc/guide/ ... tor-format .
Обычно я их и использую, но сейчас мне надо сделать updateAll (там тот же синтаксис что у where вроде). Попробовал делать так ['and', ['!=', 'attr1', 123], ['attr2' => true]] - sql сбилдило неверный: WHERE (`attr1` != 'site') AND (`attr2`=TRUE). Вот и как это понимать? :shock: Что за site? Я такого не писал в запросе точно. И почему TRUE, хотя обычно он умеет приводить булевый тип к 1 или 0.

andku83
Сообщения: 665
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Сложное условие

Сообщение andku83 » 2018.04.23, 18:03

попробуйте вместо "!=" использовать "<>"

Brainfuck
Сообщения: 161
Зарегистрирован: 2018.02.19, 14:20

Re: Сложное условие

Сообщение Brainfuck » 2018.04.24, 09:07

andku83 писал(а):
2018.04.23, 18:03
попробуйте вместо "!=" использовать "<>"
Вы же видите что проблема не в операторе - он передается в запрос нормально. Да и в mysql он есть. Всегда его использую. Впрочем замена не помогла.

Аватара пользователя
Alexum
Сообщения: 582
Зарегистрирован: 2016.09.26, 10:00

Re: Сложное условие

Сообщение Alexum » 2018.04.24, 09:24

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

['and', ['!=', 'attr1', 123], ['attr2' => true]]
Данная конструкция должна работать и собирать (...WHERE ([attr1] != 123) AND ([attr2]=TRUE)), непонятно откуда у вас такой результат. Возможно, не на тот запрос при дебаге смотрите. Как вариант покажите код, где делаете запрос.

Ответить