Массовое изменение записей

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
paulchertov
Сообщения: 15
Зарегистрирован: 2014.05.14, 10:18

Массовое изменение записей

Сообщение paulchertov »

Добрый день, подскажите, есть и решение наподобие createMultipleInsertCommand, только не для создания, а для обновления (update) записей?

yan
Сообщения: 942
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: Массовое изменение записей

Сообщение yan »

нет такого, если mysql то формируйте и выполняйте http://dev.mysql.com/doc/refman/5.6/en/ ... icate.html

kawabanga
Сообщения: 806
Зарегистрирован: 2013.10.12, 23:35
Откуда: Новосибирск

Re: Массовое изменение записей

Сообщение kawabanga »


paulchertov
Сообщения: 15
Зарегистрирован: 2014.05.14, 10:18

Re: Массовое изменение записей

Сообщение paulchertov »

Попробовал

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

public function actionTest(){
        $arrayForMass = array();
        $arrayForMass[] = array(
            'id' => 1001,
            'name' => 'waaaaagh',
            'type' => 'service'
        );
        $arrayForMass[] = array(
            'id' => 1002,
            'name' => 'raaaaagh',
            'type' => 'service'
        );
        $arrayForMass[] = array(
            'id' => 1003,
            'name' => 'teeeeest',
            'type' => 'service'
        );
        $builder=Yii::app()->db->schema->commandBuilder;
        $command=$builder->createMultipleInsertCommand('sample', $arrayForMass);
        print_r($command);
        echo '<br><br>';
        $megaQuery = $command->getText(). ' ON DUPLICATE KEY UPDATE name=VALUES(name), type=VALUES(type)';
        $command->setText($megaQuery);
        print_r($command);
        $command->execute();
    } 
Проблема в том, что параметры хранятся в каком-то защищенном свойстве объекта и при перезадании текста запроса все трется:(

paulchertov
Сообщения: 15
Зарегистрирован: 2014.05.14, 10:18

Re: Массовое изменение записей

Сообщение paulchertov »

Я полагаю, что это можно как-то сделать через
protected CDbCommand composeMultipleInsertCommand(mixed $table, array $data, array $templates=array ( ))
Указанные тут $templates
Но как они работают что-то нигде найти не могу

alexZT
Сообщения: 362
Зарегистрирован: 2012.03.06, 11:33
Откуда: Украина/Житомир
Контактная информация:

Re: Массовое изменение записей

Сообщение alexZT »

я человек и мне свойственно ошибаться
yii@conference.jabber.ru

paulchertov
Сообщения: 15
Зарегистрирован: 2014.05.14, 10:18

Re: Массовое изменение записей

Сообщение paulchertov »

alexZT - специально стараюсь по минимуму лезть в "чистый" sql - именно потому что плохо его знаю и поэтому плохо знаю требования его безопасности
поэтому и хочется максимально силами yii сделать

Аватара пользователя
sluchainiyznak
Сообщения: 617
Зарегистрирован: 2013.05.19, 17:51
Откуда: ХМАО-Югра, г. Сургут
Контактная информация:

Re: Массовое изменение записей

Сообщение sluchainiyznak »

Если с использованием ActiveRecord, то вот - http://www.yiiframework.com/doc/api/1.1 ... All-detail

alexZT
Сообщения: 362
Зарегистрирован: 2012.03.06, 11:33
Откуда: Украина/Житомир
Контактная информация:

Re: Массовое изменение записей

Сообщение alexZT »

paulchertov писал(а):alexZT - специально стараюсь по минимуму лезть в "чистый" sql - именно потому что плохо его знаю и поэтому плохо знаю требования его безопасности
поэтому и хочется максимально силами yii сделать
ну, рано или поздно придется, ибо иногда силами оберток не все удается сделать, или уходит куда больше времени, чтобы разобраться как это сделать + ORM на фронте - это не всегда допустимо
я человек и мне свойственно ошибаться
yii@conference.jabber.ru

paulchertov
Сообщения: 15
Зарегистрирован: 2014.05.14, 10:18

Re: Массовое изменение записей

Сообщение paulchertov »

ну, рано или поздно придется, ибо иногда силами оберток не все удается сделать, или уходит куда больше времени, чтобы разобраться как это сделать + ORM на фронте - это не всегда допустимо
По счастью нет:) - это наверное единственное что я делаю с БД - дальше порядок задач такой, что БД становится злом как класс.

paulchertov
Сообщения: 15
Зарегистрирован: 2014.05.14, 10:18

Re: Массовое изменение записей

Сообщение paulchertov »

sluchainiyznak писал(а):Если с использованием ActiveRecord, то вот - http://www.yiiframework.com/doc/api/1.1 ... All-detail
Спасибо, но, боюсь не поможет:
Эту штуку я видел, но или я тупой, или оно не решает именно мою задачу:
Есть некоторое количество записей (порядок - тысячи)
У всех значения разные:
1,1369, 'wdjldw', 6789
2,1909, 'wddsvjlv', 6719
...
9867, 72197, 'uiyuiyiu', 68901

и всю эту икебану надо засунуть одним запросом в базу
AR скорее всего отпадает потому что космически тяжелый.
Хочется как-то билдером йиишным собрать запрос и исполнить его.

yan
Сообщения: 942
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: Массовое изменение записей

Сообщение yan »

если порядок тысячи то лучше сделать самому, тот же метод множественной вставки конечно крут, но ввиду того что использует подстановку параметров получается довольно тяжел при вставке тысяч записей, вы же сами знаете какие значения надо обкавычить, а какие достаточно например к целому привести для безопасности, поэтому параметры необязательно использовать

Ответить