使用单独的模型方法来管理事务

时间:2010-03-19 00:07:58

标签: php codeigniter transactions

如果我有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()方法失败,交易会被逆转吗?

感谢。

1 个答案:

答案 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();
  }
}

我还假设控制器中发生的“其他事情”会阻止您在模型中创建一个只处理注册和放大的方法。撤销交易中的功能。