【问题标题】:Cakephp 3 Transaction management on multiple model operationCakephp 3 多模型操作上的事务管理
【发布时间】:2015-10-31 19:45:13
【问题描述】:

我有一个代码块,其中完成了多个表数据库操作。我需要将此代码块保留在事务中。我正在 cakephp 3 中尝试以下方式。

    $saveStatus = 1;
    $conn = ConnectionManager::get('default');
    $conn->begin();
    $tableArticles = TableRegistry::get('Articles');
    $tableUsers = TableRegistry::get('Users');
    $articlesEntity = $tableArticles->newEntities($categoriesArray);
    foreach ($articlesEntity as $entity) {          
        if(!$tableArticles->save($entity))
        {
            $saveStatus = 0;
        }
    }
    $usersEntity = $tableUsers->newEntities($usersArray);
    foreach ($usersEntity as $entity) {
        if(!$tableUsers->save($entity))
        {
            $saveStatus = 0;
        }
    }
    if($saveStatus ==1)
    {
        $conn->commit();

    }
    else
    {
        $conn->rollback();         

    }

但事务只适用于一个表。我希望多表操作应该在事务中。

在蛋糕 2 中,我们使用 begin() 和 commit() 对每个模型数据源进行事务处理,如下所示。

   $mealOptionDataSource = $this->MealOptionFood->getDataSource ();
    $foodExtrasDataSource = $this->FoodExtras->getDataSource ();
    $complexOptionDataSource = $this->ComplexOptionFood->getDataSource ();

    $mealOptionDataSource->begin ();
    $foodExtrasDataSource->begin ();
    --- Code here---
    $mealOptionDataSource->commit ();
    $foodExtrasDataSource->commit ();
    $complexOptionDataSource->commit ();

我在蛋糕 3 中找不到方法。

提前致谢。

【问题讨论】:

  • "不起作用" 不是正确的问题描述!请更具体地说明发生了什么/问题是什么。另请提及您迄今为止为调试问题所做的尝试。
  • 看起来应该可以。您是否有 SQL 输出来显示正在发生的事情? (我假设这两个表都在同一个数据库中,并且该数据库是“默认”连接引用的数据库,并且相关数据库引擎支持事务。)
  • 另外,可能与您的问题无关,但您可能想查看 Cake 连接的“事务”功能。它可以通过将您的插入包装在一个函数中来简化您的代码,如果您想回滚它们,您只需返回 false

标签: php cakephp transactions cakephp-3.0


【解决方案1】:

试试这个: http://api.cakephp.org/3.1/class-Cake.Database.Connection.html#_transactional

$connection->transactional(function ($connection) {
  $connection->newQuery()->delete('users')->execute();
});

在事务函数中,“提交”或“回滚”会根据内部所有查询的结果自动发生。

【讨论】:

    猜你喜欢
    • 2018-07-20
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    相关资源
    最近更新 更多