如果我有2个(或更多)模型方法(例如,在计费系统中)注册/撤销,以及一个控制器调用2个(或更多)这些模型方法的方法。
编写/使用像这样的2模型方法是一种好方法(也许,任何更好的建议):
public function start_transaction(){
$this->db->trans_start();
}
public function end_transaction(){
$this->db->trans_complete();
}
用控制器的方法调用:
public function smth(){
//something
$this->model->start_transaction();
$this->model->enroll();
//something else
$this->model->withdraw();
$this->model->end_transaction();
}
如果模型的withdraw()方法失败,交易会被逆转吗?
感谢。
答案 0 :(得分:1)
我是CodeIgniter的新手,但我在我的项目中做了大量的交易工作。
但是,我一直在使用DataMapper Overzealous ORM库 - 并使用该代码库处理事务。
所以DMZ代码我一直在写(谨慎 - 可能不是最佳实践)看起来像:
public function smth() {
$model->trans_begin();
// assuming method returns boolean
$enroll_success = $model->enroll();
//something else
// assuming method returns boolean
$withdraw_success = $model->withdraw();
if ($enroll_success && $withdraw_success && $model->trans_status() === TRUE)
{
$model->trans_commit();
}
else
{
$model->trans_rollback();
}
}
我还假设控制器中发生的“其他事情”会阻止您在模型中创建一个只处理注册和放大的方法。撤销交易中的功能。