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

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

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

Сообщение 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. В чем проблема у меня? Как исправить?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

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

попробуй так. твоя запись для одного значения.
Noobie
Сообщения: 29
Зарегистрирован: 2014.06.03, 13:38

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

Сообщение Noobie »

Пробовал так, то же самое выдает.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

а зачем вообще вам вся эта конструкция? Пишите сразу на AR.
Noobie
Сообщения: 29
Зарегистрирован: 2014.06.03, 13:38

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

Сообщение Noobie »

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

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

Сообщение zelenin »

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 (в чем трабл не могу понять)

Сообщение Фриз »

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

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

$command = $query->createCommand();
$models = \app\modules\shop\models\Product::findBySql($command->sql, $command->params)->all();
Ответить