我尝试在循环中保存大量CActiveRecord模型对象。我有这样的代码:
foreach ($array_of_items as $item) {
$values = array(
"title" => $item->title,
"content" => $item->content,
);
$object = new MyModel;
$object->attributes = $values;
$object->save();
}
在我的例子中,这将创建大约400个CActiveRecord对象。保存过程非常慢,因为每个**保存()**都要查询数据库。
是否有一种方法可以一次性保存所有这些对象?例如:
$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);
我找不到任何关于这个主题的东西。有人吗?
3条答案
按热度按时间iq3niunx1#
您可以对模型执行
validate()
操作,如果可以,您可以将其附加到sql文本中以进行插入,在循环之后,只需使用数据库
commandBuilder()
并执行准备好的文本qqrboqgw2#
自v1.1.14起,
CDbCommandBuilder
类的方法createMultipleInsertCommand()
可用。6jygbczu3#
对于插入多行,将此代码放在
GeneralRepository.php
文件名下components
文件夹中随处使用:
https://www.yiiframework.com/extension/yii-insert-multi-rows