Использование отдельных методов модели для управления транзакциями - PullRequest
1 голос
/ 19 марта 2010

Если у меня есть 2 (или более) метода модели, которые (например, в биллинговой системе) осуществляют регистрацию / снятие средств, и метод одного контроллера, который вызывает 2 (или более) из этих методов модели.

Это хороший способ (может быть, какие-либо предложения, как это сделать лучше), чтобы написать / использовать методы 2model, подобные этим:

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

Будет ли транзакция отменена, если не удастся отменить методdraw () модели?

Спасибо.

1 Ответ

1 голос
/ 19 марта 2010

Я довольно новичок в 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();
  }
}

Я также предполагаю, что "что-то еще", происходящее в вашем контроллере, не позволяет вам создать в вашей модели единственный метод, который бы просто обрабатывал функции транзакции ввода и вывода в транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...