mysql - Codeigniter:我可以在我的 Controller 函数中使用 $this->db->trans_start() 和 trans_complete 吗?

标签 mysql sql codeigniter activerecord

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

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

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

有没有可能我可以在我的 Controller 中使用下面这些行?像这样?

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

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

最佳答案

您的第一个选择是正确的。

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

您的第二个选择没有意义 - 事务包含不同的表。

关于mysql - Codeigniter:我可以在我的 Controller 函数中使用 $this->db->trans_start() 和 trans_complete 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23782230/

相关文章:

mysql - 返回 MIN(DATE) 和其他现有日期

mysql - 根据前一行组合值更新数据

c# - 从数据库反序列化二进制数组 C#

mysql - shell脚本mysql输出转换

mysql - Groovy SQL 中的 CASE 语句

SQL从XML字段获取数据

java - JDBC - 创建/准备好的语句 : What happens and are they concurrent?

php - Codeigniter 函数 "from_label()"给出错误

php - codeigniter 终止 session 但在重定向时使用 flashdata

php - 将复选框值存储在数据库中,无论是否在 Codeigniter 中选中