Yii. Insert multiple rows.

Мои шедевры, Программирование

Метки (теги) : , ,

Автор: masdeft

Метода добавления одним запросом несколько записей в Yii нет, и правльно, на это есть весомые причины. Этот подход зависит от выбранной суБД, и   отлично с этим справится, но я таки решил расширить ActiveRecord и добавить свой метод multiInsert(array $data), аргумент которого двумерный массив с данным для insert’ов, может это кому-то покажется изящней. Для этого я перегрузил классы CActiveRecord и CDbCommandBuilder. Примеры как юзать под кат.

В config.php

'import'=>array(
	...
        'application.extensions.multiInsert.*',
),

В контроллере

public function actionIndex()
{
    $tasks = new Tasks();
    $tasks->setMultiAttributes(array(
        array(
            'name' => 'test',
            'description' => 'test description',
        ),
        array(
            'name' => 'test2',
            'description' => 'test2 description',
        ),
        array(
            'name' => 'test3',
            'description' => 'test3 description',
        ),
    ));
    $tasks->save();
}

Класс Tasks должен наследоваться от DiverseCActiveRecord.

Пример с использованием CDbExpression

...
$tasks->setMultiAttributes(array(
    array(
        'name' => 'test',
        'description' => 'test description',
        'date' => new CDbExpression("NOW()"),
    ),

Запрос будет примерно следующим

INSERT INTO `keys` (`id_tasks`, `key_type`, `key`) VALUES (:yp00, :yp01, :yp02), (:yp13, :yp14, :yp15), (:yp26, :yp27, :yp28)

Спасибо.

 

multiInsert

multiInsert1.1

 

Комментарии:

Оставить комментарий