开发者

Using separate model methods to manage transactions

开发者 https://www.devze.com 2022-12-23 23:35 出处:网络
If i’ve got 2(or more) model methods which do (for example, in billing system) enrolling/withdrawing, and one controller’s method that calls 2(or more) of these model methods.

If i’ve got 2(or more) model methods which do (for example, in billing system) enrolling/withdrawing, and one controller’s method that calls 2(or more) of these model methods.

Is it a good way(maybe, any suggestions how to do it better) to write/use 2model methods like these:

public function start_transaction(){
    $this->db->trans_start();
}

public function end_transaction(){
   $this->db->trans_complete();
} 

And call in 开发者_开发问答controller’s method:

   public function smth(){
       //something
       $this->model->start_transaction();
       $this->model->enroll();
       //something else
       $this->model->withdraw();
       $this->model->end_transaction();
   } 

Will transaction be reversed, if model's withdraw() method fails?

Thanks.


I'm fairly new to CodeIgniter, but I've been doing a fair amount of transactional work in my project.

However, I've been using the DataMapper Overzealous ORM library - and handling transactions using that code library.

So DMZ code I've been writing (caution - may not be best practice) would look something like:

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

I'm also assuming that the "something else" happening in your controller prevents you from creating a single method in your model that would just handle both the enroll & withdraw functions in a transaction.

0

精彩评论

暂无评论...
验证码 换一张
取 消