我的控制器代码的结构如下:
$connection = ConnectionManager::get('default');
$connection->begin();
try {
//Some logic here to create entities, validate and save them
//This code can throw exceptions
$connection->commit();
}
catch (Exception $e) {
$connection->rollback();
}
这是在cakephp中使用事务的正确方法吗?如果确实引发了异常,事务将正确回滚,但会出现警告: Warning: The connection is going to be closed but there is an active transaction.
我想,我错过了一个重要的地方,因为我不明白为什么发出这个警告。我也一直在想 commit()
或者 rollback()
将结束交易。我错了吗?
1条答案
按热度按时间neekobn81#
好吧,我从两三个月前就开始试着找出这个问题的原因了,就在我问了这个问题之后,我找到了!各位,这就是魔法。
我的例外从未被发现,因为我错过了比赛
\
在catch
指令。因为我的代码存在于一个控制器中,所以php假设只捕获App\Controller\Exception
(默认控制器命名空间)。要捕获所有异常,代码必须catch (\Exception $e) {
容易的。