我正在使用MySQL的MyISAM引擎,我想在这里使用事务,这是我的代码:
DB::transaction(function () {
$project = Project::find($id);
$project->users()->detach();
$project->delete();
});
这段代码执行成功,但我不确定事务是否起作用... 我该如何测试它?
我正在使用MySQL的MyISAM引擎,我想在这里使用事务,这是我的代码:
DB::transaction(function () {
$project = Project::find($id);
$project->users()->detach();
$project->delete();
});
这段代码执行成功,但我不确定事务是否起作用... 我该如何测试它?
实际上只有两种做法,但两者都不是特别好的选择,因为DB::transaction
不会报告错误。
在闭包内部放置 try/catch 块,并在 catch 块中设置一个外部变量以便在事务失败时进行处理。
进行手动事务,使用DB::beginTransaction
和回滚/提交,同样需要一个异常处理程序,如下面的示例:
DB::beginTransaction();
try {
$project = Project::find($id);
$project->users()->detach();
$project->delete();
DB::commit();
$success = true;
} catch (\Exception $e) {
$success = false;
DB::rollBack();
}
if ($success) {
// the transaction worked carry on...
}