2016-02-05 144 views
4

我使用的MyISAM MySQL和我想在这里使用的交易是我的代码:交易与雄辩Laravel 5

DB::transaction(function() { 
$project = Project::find($id); 
$project->users()->detach(); 
$project->delete(); 
}); 

此代码执行succesfuly,但我不知道该事务的工作......我怎么能测试它?

回答

11

实际上只有两种方法,既不是特别好,因为DB:transaction不报告错误。

  1. 如果事务失败,则将try/catch块置于闭包内并在catch块中设置一个外部变量。

  2. 做一个手动事务中,使用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 ... 
    } 
+0

我不关心错误报告我只需要确定2个查询总是一起运行......你能告诉我手动事务的例子吗? –

+0

我编辑了我的答案以包含一个示例。 – delatbabel

2

的问题是很老,但在我意见是没有办法实现与MyISAM存储引擎的交易。

最新的MySQL服务器版本是5.7,相应的参考指南描述了MyISAM存储引擎不支持事务。

https://dev.mysql.com/doc/refman/5.7/en/myisam-storage-engine.html

如果我正确认识,开始,提交和回滚语句没有错误接受,但该行为与预期不同。