Условие Where во вложенном запросе - нет сравнения с вышестоящей таблицей

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Паяц
Сообщения: 40
Зарегистрирован: 2012.05.22, 20:09
Откуда: Москва, Россия

Условие Where во вложенном запросе - нет сравнения с вышестоящей таблицей

Сообщение Паяц »

Привет всем.

Конструирую запрос с вложенным select'ом. Во вложенном запросе у условии where есть сравнение значений между вложенной и вышестоящей таблицей. При этом результатом конструкции:

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

->andWhere(['=', 'children.tree', 'parent.tree'])
в дебаггере выводится

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

WHERE (`children`.`tree` = 'parent.tree')
Если же в коде имена "обернуть" по правилам Yii2

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

->andWhere(['=', 'children.tree', '{{%parent}}.[[tree]]'])
То условие так и выведется:

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

WHERE (`children`.`tree` = '{{%parent}}.[[tree]]')
Кстати, в условиях ON при LEFT JOIN (leftJoin) такая же ситуация.

Это ошибка или я что-то неправильно делаю?
Аватара пользователя
irpsv
Сообщения: 65
Зарегистрирован: 2015.07.07, 18:03
Контактная информация:

Re: Условие Where во вложенном запросе - нет сравнения с вышестоящей таблицей

Сообщение irpsv »

А зачем [[tree]] тоже обертывать в префикс то? У столбцов префиксов нет)

Как вариант оператор '=' можно заменить ассоциацией массива:

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

->andWhere(['{{children}}.tree' => '{{parent}}.tree']) 
Но это конечно не решение
...то что мы не понимаем, делает нас тупее...
Паяц
Сообщения: 40
Зарегистрирован: 2012.05.22, 20:09
Откуда: Москва, Россия

Re: Условие Where во вложенном запросе - нет сравнения с вышестоящей таблицей

Сообщение Паяц »

ElisDN, как обходной вариант - да, Expression() сняла апострофы вообще.
Ответить