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.
精彩评论