Laravel:将所有代码放入数据库事务中这是一个好习惯吗?事件无数据库查询代码?

Ahm*_*aki 5 php mysql transactions laravel

我正在创建一个订阅和团队!系统.

这是伪代码:

    $sub = Sub::create($sub_data);

    if(request for new team){
       $team = Team:create($team_data)
       Mail::queue....// sending email and notif
       // some php code here
    }
    elseif(request to join a team) 
    {
       $team = Team:find($team_data)
       $team->subscriber()->create($team_data) // a team has many subscribers
       Mail::queue....// sending email and notif
       // some php code here
    }
     // Here some extra queries... 
Run Code Online (Sandbox Code Playgroud)

现在我希望所有查询都在DB事务中执行.我可以将所有上述代码放在Laravel Transaction闭包中吗?

DB::transaction(function()
{
 // all the above code here 
});
Run Code Online (Sandbox Code Playgroud)

我的意思是有这么多的PHP代码和没有查询逻辑,比如发送电子邮件......这是一个好习惯吗?如果不是,我该怎么办?

Lui*_*noz 3

根据 Laravel 文档:

您可以在数据库外观上使用事务方法来在数据库事务中运行一组操作。如果事务Closure内抛出异常,事务将自动回滚。如果闭包执行成功,事务将自动提交。

当您正在进行的一组数据库操作需要原子性时,您可以使用事务。

也就是说——他们都需要成功或失败。两者之间没有什么。

事务用于确保数据库始终处于一致状态。

总是创建交易是一种不好的做法吗?

这取决于你在这里谈论的背景。如果是更新,那么我强烈建议显式使用 TRANSACTIONS。如果它是 SELECT 则 NO(明确)。