[Решено] Добавить экранирование в параметры Where и On при построении запросов через BuildQuery

Уже исправленные репорты или принятые предложения
Ответить
Паяц
Сообщения: 40
Зарегистрирован: 2012.05.22, 20:09
Откуда: Москва, Россия

[Решено] Добавить экранирование в параметры Where и On при построении запросов через BuildQuery

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

Сейчас код Yii2

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

->andWhere(['=', 'children.tree', '{{%parent}}.[[tree]]']) 
конвертируется в следующий код в SQL-запросе

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

WHERE (`children`.`tree` = '{{%parent}}.[[tree]]')
Т.е. экранирование имён таблиц и названия столбцов в условиях не производится.

Было бы удобно, чтобы экранирование всё-таки отрабатывалось. Это необходимо при построении вложенных запросов, когда в условии вложенного запроса есть сравнение с вышестоящей таблицей.
Последний раз редактировалось Паяц 2015.10.08, 14:36, всего редактировалось 1 раз.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Добавить экранирование в параметры Where и On при построении запросов через BuildQuery

Сообщение ElisDN »

Посмотрите, что выведет:

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

$query = Category::find()->where(['{{%children}}.[[tree]]' => new \yii\db\Expression('{{%parent}}.[[tree]]')]);

echo $query->createCommand()->rawSql; 
Паяц
Сообщения: 40
Зарегистрирован: 2012.05.22, 20:09
Откуда: Москва, Россия

Re: Добавить экранирование в параметры Where и On при построении запросов через BuildQuery

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

ElisDN, сработало так, как нужно. А я уж было отчаялся. Спасибо.
Ответить