php - 当没有数据库异常发生时,Laravel 事务不会回滚
问题描述
这是我的代码:
DB::transaction(function () use ($r, $certificate, $candidate) {
UserCertificate::create([
'user_id' => $r['user_id'],
'certificate_id' => $certificate->id,
'issue_date' => Carbon::now()
]);
// create badge
$this->createCandidateBadge($candidate, $certificate);
});
创建候选人徽章时发生异常:$this->createCandidateBadge
但是当我看到user_certificates
表格时,会创建一个证书!除非成功创建徽章,否则我不想在 DB 中创建证书!
解决方案
您可以使用 try 和 catch 块进行自定义事务功能以及手动提交和回滚,如下所示:
DB::beginTransaction();
try{
UserCertificate::create([
'user_id' => $r['user_id'],
'certificate_id' => $certificate->id,
'issue_date' => Carbon::now()
]);
// create badge
$this->createCandidateBadge($candidate, $certificate);
DB::commit();
}catch (\Exception $e){
DB::rollBack();
}
如果发生任何类型的异常,它将被捕获,然后将回滚所有数据库操作。如果没有异常数据将被保存。
推荐阅读
- javascript - 'animate()' 函数我的代码不起作用,但 'css()' 起作用。怎么了?
- python - 将熊猫多索引系列转换为 Json python
- windows - MS-Word 的 VSTO 插件的 AppData 的位置
- powerbi - 使用 RLS 时,以编程方式在 PowerBi 服务中的角色中添加用户
- php - 无法显示数据表。拉拉维尔 5.5
- python-3.x - 如何从 Pandas 的列中转移数值或非数值
- plugins - 使创建竹插件在部署项目中可用
- dynamics-crm - 应用程序是否可以依赖另一个附加组件 - Appsource 应用程序
- javascript - 选中复选框并单击下载按钮选择图像下载并下载所有图像
- scala - 无形的 HList 文字类型被删除了吗?