Transactions 与能言善辩的Laravel 5的交易

Transactions 与能言善辩的Laravel 5的交易,transactions,laravel-5,eloquent,Transactions,Laravel 5,Eloquent,我正在使用MyISAM for MySQL,我想使用transaction这是我的代码: DB::事务(函数(){ $project=project::find($id); $project->users()->detach(); $project->delete(); }); 此代码执行成功,但我不确定事务是否正常。。。如何测试它?实际上只有两种方法可以做到这一点,两种方法都不是特别好,因为DB::transaction不会报告错误 在闭包内放置try/catch块,如果事务失败,则在cat

我正在使用MyISAM for MySQL,我想使用transaction这是我的代码:

DB::事务(函数(){
$project=project::find($id);
$project->users()->detach();
$project->delete();
});

此代码执行成功,但我不确定事务是否正常。。。如何测试它?

实际上只有两种方法可以做到这一点,两种方法都不是特别好,因为
DB::transaction
不会报告错误

  • 在闭包内放置try/catch块,如果事务失败,则在catch块中设置外部变量

  • 使用异常处理程序,再次使用
    DB::beginTransaction
    和rollback/commit执行手动事务,如下例所示:

  • DB::beginTransaction();
    试一试{
    $project=project::find($id);
    $project->users()->detach();
    $project->delete();
    DB::commit();
    $success=true;
    }捕获(\异常$e){
    $success=false;
    DB::rollBack();
    }
    如果($成功){
    //交易继续进行。。。
    }
    
    这个问题已经很老了,但在我看来,使用MyISAM存储引擎无法实现事务

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


    如果我知道的正确,begin、commit和rollback语句将被接受,不会出现错误,但行为与预期不同。

    我不关心错误报告,我只需要确保两个查询始终同时运行。。。您能给我演示一下手动事务的例子吗?对于仍然访问此问题的人,请使用DB::rollBack();应使用capital B MyISAM引擎不支持交易。每个查询都是原子的。如果需要事务,则表必须是InnoDB或NDB,或其他支持事务的引擎。您可能在搜索Laravel mysql事务时发现了这个问题,但问题的原始假设只能回答为“不可能,除非您将表转换为InnoDB”