gpt4 book ai didi

php - Laravel DB::transaction 不回滚异常

转载 作者:可可西里 更新时间:2023-11-01 06:31:25 25 4
gpt4 key购买 nike

我在使用 Laravel 4.2 和 DB::transaction 时遇到了这个小问题。我遇到了交易未回滚的问题,所以我尝试了最简单的代码片段并将其放入 routes.php 以进行测试:

路由.php:

DB::transaction(function(){

$user = App::make("User");
$user->save();
throw new Exception("Should not create users");
});
...
...
...
Some other code here

简单地说,我尝试在事务闭包中创建用户,并在创建用户后抛出异常以强制回滚事务。我的问题是即使抛出异常,事务也不会回滚。每次刷新应用程序时,我都会在数据库中获得新用户。相同的代码在本地机器上按预期工作,但在我计划用于生产的服务器上,它根本不会回滚事务。你知道为什么吗?

编辑:

服务器 MySql:5.1.73-cll - MySQL 社区服务器 (GPLv2)

服务器 PHP:PHP 5.4.30 (cli)(构建时间:2014 年 7 月 19 日 15:22:18)

本地 PHP:5.5.9

本地 MySql:5.6.16

服务器在 CentOs 上,而本地机器是 Windows 7。

最佳答案

所以我正在回答我自己的问题。 InnoDb 直到 MySql 5.5 才成为默认的存储引擎。在我的例子中,MYISAM 是默认的存储引擎,不支持事务。我必须做的是在我的 CPanel 服务器安装的 MySQL 中启用 InnoDB。然后我必须确保我的 Laravel 迁移中的每个表都是使用 InnoDB 引擎创建的。我通过添加来做到这一点:

     $table->engine = "InnoDB"; 

到每个迁移文件。使用 InnoDB 引擎设置所有表后,事务将按预期工作。

关于php - Laravel DB::transaction 不回滚异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24945631/

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