我想在循環中保存很多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秒。 –