QueryBuilder и условие IN (в чем трабл не могу понять)

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Noobie
Сообщения: 29
Зарегистрирован: 2014.06.03, 13:38

QueryBuilder и условие IN (в чем трабл не могу понять)

Сообщение Noobie » 2015.09.06, 10:48

Всем привет!
Несколько часов уже бьюсь над кодом, не могу понять что не так..

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

$query = new Yii\db\Query();
$query->from('{{%shop_products}}');
$query->where(['id'=>$product_id_array]); // здесь $product_id_array - массив из ID нужных товаров
$query->orderBy($order_by);
$sql = $query->createCommand()->sql;
$models = \app\modules\shop\models\Product::findBySql($sql)->all();
 
и всё это дело выдает вот такую ошибку:
Database Exception – yii\db\Exception
SQLSTATE[HY093]: Invalid parameter number: no parameters were bound
The SQL being executed was: SELECT * FROM `adl_shop_products` WHERE `id` IN (:qp0, :qp1, :qp2)
В оффдоке есть пример такого использования queryBuilder. В чем проблема у меня? Как исправить?

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: QueryBuilder и условие IN (в чем трабл не могу понять)

Сообщение zelenin » 2015.09.06, 12:17

$query->where(['in', 'id', $product_id_array]);

попробуй так. твоя запись для одного значения.

Noobie
Сообщения: 29
Зарегистрирован: 2014.06.03, 13:38

Re: QueryBuilder и условие IN (в чем трабл не могу понять)

Сообщение Noobie » 2015.09.06, 12:19

Пробовал так, то же самое выдает.

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: QueryBuilder и условие IN (в чем трабл не могу понять)

Сообщение zelenin » 2015.09.06, 12:22

а зачем вообще вам вся эта конструкция? Пишите сразу на AR.

Noobie
Сообщения: 29
Зарегистрирован: 2014.06.03, 13:38

Re: QueryBuilder и условие IN (в чем трабл не могу понять)

Сообщение Noobie » 2015.09.06, 12:35

У меня в orderBy идет сортировка по связующей таблице. Да и строка
$models = \app\modules\shop\models\Product::findBySql($sql)->all();
здесь только для отладки, в боевой версии идет получение по построенному запросу SqlDataProvider и вывод через ListView.
Можно конечно и переделать на AR, но хотелось бы сохранить структуру как есть, да и разобраться таки с причиной.

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: QueryBuilder и условие IN (в чем трабл не могу понять)

Сообщение zelenin » 2015.09.06, 12:47

Noobie писал(а):У меня в orderBy идет сортировка по связующей таблице.
->orderBy(['news.title desc'])
Noobie писал(а): Да и строка
$models = \app\modules\shop\models\Product::findBySql($sql)->all();
здесь только для отладки, в боевой версии идет получение по построенному запросу SqlDataProvider и вывод через ListView.
Можно конечно и переделать на AR, но хотелось бы сохранить структуру как есть, да и разобраться таки с причиной.
ну так попробуйте без смешения методов. Возможно дело в этом.

Фриз
Сообщения: 85
Зарегистрирован: 2012.01.20, 17:23

Re: QueryBuilder и условие IN (в чем трабл не могу понять)

Сообщение Фриз » 2015.09.06, 16:13

последние две строчки заменить на:

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

$command = $query->createCommand();
$models = \app\modules\shop\models\Product::findBySql($command->sql, $command->params)->all();

Ответить