Codeigniter:我可以在我的控制器功能中使用$ this-> db-> trans_start()和trans_complete吗?

Sye*_*jid 7 mysql sql activerecord codeigniter

我有多个模型函数在事务完成之前执行.例如

$this->model_A->insert('....');
$this->model_C->insert('....');
$this->model_D->insert('....');
$this->model_E->update('....');
Run Code Online (Sandbox Code Playgroud)

什么是使用trans_start()和trans_complete()的最佳方式,因此插入或更新的过程在任何时候都可以被中断,事务可以相应地回滚或提交...

有没有可能我可以在我的控制器中使用以下这些行?像这样?

$this->db->trans_start();

    $this->model_A->insert('....');
    $this->model_C->insert('....');
    $this->model_D->insert('....');
    $this->model_E->update('....');

$this->db->trans_complete();

OR

$this->model_A->trans_start();

    $this->model_A->insert('....');
    $this->model_C->insert('....');
    $this->model_D->insert('....');
    $this->model_E->update('....');

$this->model_A->trans_complete();
Run Code Online (Sandbox Code Playgroud)

如果不是处理此类交易的最佳方式,这是一种好的做法吗?

小智 8

你的第一个选择是正确的.

事务逻辑位于数据库级别.Codeigniter没有记录在"表"级别执行此操作(请参阅http://www.codeigniter.com/user_guide/database/transactions.html).

您的第二种选择没有意义 - 交易包含不同的表格.