我正在创建一个订阅和分组!系统。
这是伪代码:
$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...
现在,我希望所有查询都在数据库事务中执行。 我可以把上面的所有代码放在Laravel交易关闭中吗?
DB::transaction(function()
{
// all the above code here
});
我的意思是有这么多的 php 代码而没有查询逻辑,比如发送电子邮件......这是一个好的做法吗?如果不是,我该怎么办?
根据 Laravel 文档:
您可以使用数据库外观上的事务方法在数据库事务中运行一组操作。如果在事务关闭中引发异常,则事务将自动回滚。如果关闭成功执行,事务将自动提交。
当您进行的数据库操作集需要原子操作时,可以使用事务。
那就是 - 他们都需要成功或失败。两者之间什么都没有。
事务用于确保数据库始终处于一致状态。
总是创建事务是一种不好的做法吗?
这取决于你在这里谈论的上下文。如果是更新,那么我强烈建议明确使用交易。如果它是选择,则为否(明确(。