yii2, не могу сделать множественный update (нужно обновить ~10к записей).
запрос выглядит так:
UPDATE `product`
SET `name`=(
CASE
WHEN `code`=122 THEN "product_name1"
/*...*/
WHEN `code`=125 THEN "product_nameN"
END)
WHERE `code` IN (122,125,/*...*/, 999999);
код php:
$sql = ''
. 'UPDATE {{' . Products::tableName() . '}}'
. ' SET [[name]]=(CASE';
foreach ($name_update_array as $record_code => $record_name) {
$sql .= ' WHEN [[code]]=' . $record_code . ' THEN "' . $record_name . '"';
}
$sql .= ' END) WHERE [[code]] IN (' . implode(',', array_keys($name_update_array)) . ')';
$query = \Yii::$app->db->createCommand($sql);
try {
$query->execute();
}
catch (\Exception $exception) {
Log::addLog([
'logfile' => $this->logfile,
'name' => $settings['name'],
'status' => 'ERROR',
'data' => $exception
]);
return false;
}
ошибка:
Next yii\db\Exception: SQLSTATE[HY093]: Invalid parameter number: no parameters were bound
при ручном вводе и на малых количествах записей все прекрасно отрабатывает.
UPDATE product SET name=(CASE WHEN code=121 THEN "qwe" WHEN code=122 THEN "qweasd" END) WHERE code IN (121,122,125,126,127);
Query OK, 5 rows affected, 3 warnings (0.03 sec)
Rows matched: 5 Changed: 5 Warnings: 3
как исправить?