gpt4 book ai didi

php - Cakephp 3 多模型操作的事务管理

转载 作者:搜寻专家 更新时间:2023-10-31 21:56:15 26 4
gpt4 key购买 nike

我有一个代码块,其中完成了多个表数据库操作。我需要将此代码块保留在事务中。我正在尝试在 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 中做到这一点的方法。

提前致谢。

最佳答案

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

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

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

关于php - Cakephp 3 多模型操作的事务管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33455868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com