Страница 1 из 1

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

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

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

$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. В чем проблема у меня? Как исправить?

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

Добавлено: 2015.09.06, 12:17
zelenin
$query->where(['in', 'id', $product_id_array]);

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

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

Добавлено: 2015.09.06, 12:19
Noobie
Пробовал так, то же самое выдает.

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

Добавлено: 2015.09.06, 12:22
zelenin
а зачем вообще вам вся эта конструкция? Пишите сразу на AR.

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

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

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

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

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

Добавлено: 2015.09.06, 16:13
Фриз
последние две строчки заменить на:

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

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