我知道如何在纯DAO或ActiveModel中使用事务,在事务调用之前初始化事务$model->save()
并在发生任何异常时回滚。
但是,如果我可以访问的唯一代码(无论为什么)是Yii事件,那么如何使用事务?
public function beforeDelete()
{
foreach($this->menuItems as $menuItem) $menuItem->delete();
return parent::beforeDelete();
}
如果我在那里发起事务,捕获可能的异常并在其上回滚整个事务,那么将仅回滚关系模型的删除(在这里:菜单项)。它不会阻止(回滚)主记录的删除。
通过FALSE
在beforeDelete
异常情况下自己返回来防止删除主记录,这是否是我需要照顾的?还是应该在Yii事件中完全避免交易?
关于覆盖保存方法:
public function save($runValidation=true,$attributes=null)
{
$transaction=$this->getDbConnection()->beginTransaction();
try
{
$result = parent::save($runValidation,$attributes);
if($result)
$transaction->commit();
else
$transaction->rollback();
}
catch(Exception $e)
{
$transaction->rollback();
$result = false;
}
return $result;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句