我正在创建订阅和合作!系统
这是伪代码:
$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 Transaction闭包中吗?
DB::transaction(function()
{
// all the above code here
});
我的意思是拥有如此多的PHP代码而没有查询逻辑,比如发送电子邮件......这是一个好习惯吗?如果不是,我该怎么办?
答案 0 :(得分:3)
根据Laravel文档:
您可以使用数据库外观上的事务方法在数据库事务中运行一组操作。如果在事务Closure中抛出异常,则事务将自动回滚。如果Closure成功执行,则事务将自动提交。
当您正在进行的数据库操作集需要是原子时,您使用事务。
那就是 - 他们都需要成功或失败。介于两者之间。
将使用事务来确保数据库始终处于一致状态。
始终创建交易是一种不好的做法吗?
这取决于你在这里谈论的背景。如果是更新,那么我强烈建议明确使用TRANSACTIONS。如果它是SELECT然后是NO(明确地)。