Я пытаюсь сохранить много объектов модели CActiveRecord в цикле. у меня есть что-то вроде этого:Yii: сохранение нескольких записей в одном запросе
foreach ($array_of_items as $item) {
$values = array(
"title" => $item->title,
"content" => $item->content,
);
$object = new MyModel;
$object->attributes = $values;
$object->save();
}
В моем случае, это создает около 400 объектов, метод CActiveRecord. Процесс сохранения очень медленный, потому что каждый save() запрашивает базу данных.
Есть ли способ сохранить все эти объекты за один раз? Что-то вроде:
$objects = array();
foreach ($array_of_items as $item) {
$values = array(
"title" => $item->title,
"content" => $item->content,
);
$object = new MyModel;
$object->attributes = $values;
$objects[] = $object;
}
save_all_objects($objects);
Я не мог найти что-нибудь по этому вопросу. Кто угодно?
Нет ничего, что можно было бы сделать в Yii из количества времени, которое я потратил на это, то, как вы делаете это сейчас, должно быть единственным вариантом, по всей вероятности, - заинтересовался, чтобы узнать, есть ли альтернативы. – Rohan
Я думаю, что вы можете найти свое решение в принятом ответе [этого вопроса] (http://stackoverflow.com/questions/18518001/batch-insert-in-yii). – ndgraef
Хорошо, получается, что мне действительно нужно было использовать транзакцию. Сохранение 400 моделей в петле foreach: 25 секунд. Завершение цикла foreach в beginTransaction & commit: 0,36 секунды. –