Задать вопрос
@gachkydxvbgd

Как сделать batchinsert yii2 с обновлением дубликатов?

В данный момент есть такой код
$command = Yii::$app
                            ->db
                            ->createCommand()
                            ->batchInsert(
                                'test',
                                ['id', 'user_id', 'status', 'name'],
                                $rows
                            );
                        $command->sql .= "ON DUPLICATE KEY UPDATE name = 2";
                        $command->execute();

И если есть дубль обновляет значение 'name' на 2 , а как сделать что бы обновляло на значение из массива?
  • Вопрос задан
  • 3436 просмотров
Подписаться 2 Средний Комментировать
Решения вопроса 1
У меня так сделано в одном из проектов, наверняка можно оптимизировать, но работает

$fullarray = [.....]; //Массив с данными
 $fields = ['product_id','name','group_id','manufacturer','fullname','code'];
       
$db = Yii::$app->db;
$sql = $db->queryBuilder->batchInsert(self::tableName(), $fields, $fullarray);
$product_insert_count = $db->createCommand($sql . ' ON DUPLICATE KEY UPDATE name = VALUES(name), group_id = VALUES(group_id), manufacturer = VALUES(manufacturer), fullname = VALUES(fullname), code = VALUES(code)')->execute();
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov Куратор тега MySQL
Web developer
как сделать что бы обновляло на значение из массива?

Для каждого id свой новый name (не "2" и не тот, который в insert)?

Вариант 1: добавить новое поле, в него записывать новый name и on duplicate key обновлять старый name на него.

Вариант 2: batchInsert во временную таблицу, update дубликатов, insert select не дубликатов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы