您当前的位置:首页 > 分类 > 技术资讯 > YII > 正文

Yii 事务批量插入数据

发布时间:2015-01-30 16:59:50      来源:51推一把
【摘要】Yii 事务批量插入数据,如果在$model6->save()可能是因为某种原因没能成功插入或更新数据,这时候会返回false,但不会有异常抛出来驱动事物回滚。 你应该判断如果save时返回了false,即没有插入或更新成功,应该手动抛出Exception,这样在捕获Exception后可以rollback。
$transaction=Yii::app()->db->beginTransaction();
try{
  $model1->save();
  $model2->save();
  $model3->save();
  $model4->save();
  $model5->save();
  //出错
  $model6->save();
  $transaction->commit();
} catch(Exception $e){
  $transaction->rollBack();
}

model1 , model2 , model3 , model4 , model5 照样存储成功!


如果在$model6->save()可能是因为某种原因没能成功插入或更新数据,这时候会返回false,但不会有异常抛出来驱动事物回滚。
你应该判断如果save时返回了false,即没有插入或更新成功,应该手动抛出Exception,这样在捕获Exception后可以rollback。

$transaction=Yii::app()->db->beginTransaction();
try{
    foreach ($models as $model) {
        if (!$model->save()) {
            throw new Exception();
        }
    }
    $transaction->commit();
} catch(Exception $e){
    $transaction->rollBack();
}

注:MYISAM不回滚,INNODB支持回滚。

更改表的引擎

ALTER TABLE table_name ENGINE=INNODB;  
ALTER TABLE table_name ENGINE=MYISAM;