代码:
class myModel extends Phalcon'Mvc'Model
{
public function beforeSave()
{
$this->getDi()->getShared('db')->begin();
}
...
public function afterSave()
{
$this->getDi()->getShared('db')->commit();
}
}
我的问题是 - 如果在此过程中,在 beforeSave() 和 afterSave() 之间抛出异常会发生什么 - 我如何干净地回滚事务?我应该把$this->getDi()->getShared('db')->rollback(); 放在哪里?
谢谢!
我建议完全重载save()方法。
这是我的交易示例。请注意,如果您不打算在此处实现其他逻辑(例如删除相关模型),则不需要事务
/**
* Delete old relations before saving new ones
*/
public function save($data=null, $whiteList=null)
{
$db = $this->getDI()->get('db');
try
{
// Start transaction
$db->begin();
// ... Do some additional work. Remove related models etc...
// Update model
if (!parent::save($data, $whiteList))
throw new 'Exception('Cannot save the model');
$db->commit();
}
catch ('Exception $e)
{
$db->rollback();
$this->appendMessage(new 'Phalcon'Mvc'Model'Message($e->getMessage(), '', 'error', $this));
return false;
}
return true;
}