我想在循环中保存很多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
好吧,事实证明,我真正需要的是使用交易。在foreach循环中保存400个模型:25秒。在beginTransaction&commit中包装foreach循环:0.36秒。 –