You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel使用DB::Transaction插入数据失效问题排查

问题分析与修复方案

你的代码在加入事务后出现异常,核心问题集中在异常捕获不完整、冗余逻辑和调试信息缺失这几点:

1. 异常捕获范围不足

Laravel数据库操作可能抛出\Throwable类型的错误(比如PDO致命错误、PHP原生Error类错误),而你当前仅捕获\Exception,会导致部分错误无法触发事务回滚,事务长期处于未提交状态,最终引发数据插入异常甚至数据库连接阻塞。

2. 冗余的判断逻辑

Category::create()执行失败时会直接抛出异常进入catch块,不会返回false,所以if ($new_mainCategory)的判断完全多余,反而可能误导你误以为创建成功,后续无意义地执行翻译插入操作。

3. 错误信息缺失

当前catch块仅返回通用错误提示,没有记录或返回具体异常信息,导致你完全无法定位问题根源。


修复后的代码

public function createDone(MainCategoryRequest $request)
{
    try {
        DB::beginTransaction();

        // 创建主分类(create失败会直接抛异常,无需额外判断)
        $new_mainCategory = Category::create([
            'slug' => $request->slug,
            'is_active' => $request->is_active,
        ]);

        // 创建多语言翻译
        CategoryTranslation::create([
            'category_id' => $new_mainCategory->id,
            'locale' => 'en',
            'name' => $request->name_en,
        ]);

        CategoryTranslation::create([
            'category_id' => $new_mainCategory->id,
            'locale' => 'ar',
            'name' => $request->name_ar,
        ]);

        DB::commit();
        return response()->json(['message' => 'Category created successfully'], 201);
    } catch (\Throwable $e) {
        DB::rollback();
        // 记录错误日志(生产环境必备,方便后续排查)
        \Log::error('创建分类失败: ' . $e->getMessage(), ['trace' => $e->getTraceAsString()]);
        // 返回具体错误信息(开发环境用,生产环境可换回通用提示)
        return response()->json([
            'error' => 'Failed to create category',
            'detail' => $e->getMessage()
        ], 500);
    }
}

额外排查点

  • 确认Category和CategoryTranslation模型的$fillable属性包含所有需要批量赋值的字段(如slug、is_active、category_id、locale、name),否则会触发MassAssignmentException。
  • 检查数据库外键约束:CategoryTranslation的category_id字段是否正确关联Category的主键,且主键自增规则正常。
  • 开发环境开启APP_DEBUG=true,可直接查看详细错误堆栈,快速定位问题。

内容的提问来源于stack exchange,提问作者Gehad Gallo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 01:42:14