Построитель запросов подставляет кавычки

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
darlov
Сообщения: 204
Зарегистрирован: 2012.01.31, 16:09

Построитель запросов подставляет кавычки

Сообщение darlov »

Вот такой запрос

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

        $query = (new Query())
            ->from('form_widget_items')
            ->where([
                'form_widget_id' => $widget_id
            ]);
        return $query->orderBy('position')->all();
генерирует вот такой запрос

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

SELECT * FROM `form_widget_items` WHERE `form_widget_id`='1473794623372299' ORDER BY `position`
число 1473794623372299 оборачивается в кавычки и из за этого запрос отрабатывает медленней. Каким образом можно подсунуть тип переменной, чтоб убрать кавычки?
Спасибо!
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Построитель запросов подставляет кавычки

Сообщение caHek2x »

form_widget_id в таблице это числовой тип данных ?
не ну может глупость ... но может так:
'form_widget_id' => intval($widget_id)
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Построитель запросов подставляет кавычки

Сообщение SiZE »

http://www.yiiframework.com/doc-2.0/yii ... e()-detail
$dataType | integer | If null, the type is determined by the PHP type of the value.
Аватара пользователя
darlov
Сообщения: 204
Зарегистрирован: 2012.01.31, 16:09

Re: Построитель запросов подставляет кавычки

Сообщение darlov »

caHek2x писал(а):form_widget_id в таблице это числовой тип данных ?
не ну может глупость ... но может так:
'form_widget_id' => intval($widget_id)
Я так пока и делаю, думаю есть решение иначе.
Аватара пользователя
darlov
Сообщения: 204
Зарегистрирован: 2012.01.31, 16:09

Re: Построитель запросов подставляет кавычки

Сообщение darlov »

SiZE писал(а):http://www.yiiframework.com/doc-2.0/yii ... e()-detail
$dataType | integer | If null, the type is determined by the PHP type of the value.
Это же для DAO, а как достать с Query bindValue()?
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Построитель запросов подставляет кавычки

Сообщение SiZE »

darlov писал(а):
SiZE писал(а):http://www.yiiframework.com/doc-2.0/yii ... e()-detail
$dataType | integer | If null, the type is determined by the PHP type of the value.
Это же для DAO, а как достать с Query bindValue()?
Для параметров переданных в Query тоже вызывается bindValue. Вот тут происходит определение https://github.com/yiisoft/yii2/blob/ma ... a.php#L259

И command не только в dao используется если что. Вы пройдите по всей цепочке вызова и все станет ясно.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Построитель запросов подставляет кавычки

Сообщение zelenin »

darlov писал(а):
caHek2x писал(а):form_widget_id в таблице это числовой тип данных ?
не ну может глупость ... но может так:
'form_widget_id' => intval($widget_id)
Я так пока и делаю, думаю есть решение иначе.
так если вы параметр строкой вставляете, то на каком основании квери билдер ее должен числом представлять?
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Построитель запросов подставляет кавычки

Сообщение SiZE »

darlov писал(а):Я так пока и делаю, думаю есть решение иначе.
О.. я это пропустил ))) Таки или вручную биндить и тип PDO указывать, или приводить к нужному типу параметр.
Аватара пользователя
darlov
Сообщения: 204
Зарегистрирован: 2012.01.31, 16:09

Re: Построитель запросов подставляет кавычки

Сообщение darlov »

zelenin писал(а):
darlov писал(а):
caHek2x писал(а):form_widget_id в таблице это числовой тип данных ?
не ну может глупость ... но может так:
'form_widget_id' => intval($widget_id)
Я так пока и делаю, думаю есть решение иначе.
так если вы параметр строкой вставляете, то на каком основании квери билдер ее должен числом представлять?
Я знаю что строкой, думал, есть возможность указать тип параметра для PDO, но его нет, оказывается автоматом пытается определить.
Сейчас уделил 20 минут чтоб пробежаться по Query и теперь понимаю, что зря вообще вопрос этот здесь поднял. Можно было и самому понять. Спасибо.
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Построитель запросов подставляет кавычки

Сообщение SiZE »

darlov писал(а): думал, есть возможность указать тип параметра для PDO, но его нет
Блин. Ты издеваешься что ли? :lol:
Аватара пользователя
darlov
Сообщения: 204
Зарегистрирован: 2012.01.31, 16:09

Re: Построитель запросов подставляет кавычки

Сообщение darlov »

SiZE писал(а):
darlov писал(а): думал, есть возможность указать тип параметра для PDO, но его нет
Блин. Ты издеваешься что ли? :lol:
А можно подробнее?) Видимо я туплю.
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Построитель запросов подставляет кавычки

Сообщение SiZE »

darlov писал(а):А можно подробнее?) Видимо я туплю.
Это чисто академический пример так сказать.
$q = (new \yii\db\Query())
->from(\common\models\Test::tableName())
->andWhere('id >= :id');

$command = $q->createCommand();
$command->bindValue(':id', 500, \PDO::PARAM_INT);

var_dump($command->queryAll());
Но указание типа в данном случае не работает так, как от него ожидается. Лучше через (int).
Ответить