我有一个代码块,可以完成多个表数据库操作。我需要在事务中保留此代码块。我想在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中做到这一点的方法。
感谢进步。
答案 0 :(得分:0)
试试这个: http://api.cakephp.org/3.1/class-Cake.Database.Connection.html#_transactional
$connection->transactional(function ($connection) {
$connection->newQuery()->delete('users')->execute();
});

在交易功能中,'提交'或者'回滚'根据内部所有查询的结果自动发生。