数据库事务不回滚 [Laravel 7.3]

Jon*_*han 0 laravel eloquent

我正在一个应用程序上运行 Laravel 7.3,我觉得这可能是一个 Laravel 框架错误,因为我正在为此绞尽脑汁......

我有一个数据库事务,其中保存了模型,所有这些都在 try/catch 中,但它仍然保存模型更新,我只是不明白为什么,因为它命中了catch()并且响应 json 命中了,所以我假设回滚正在运行,但数据库仍在更新。

try {
    DB::beginTransaction();

    foreach ($models as $model) {
        $model->rungroup_id = $rungroup->id;
        $model->zone_id = $rungroup->getFirstZoneID();
        $model->delivery_status = 'next';
        $model->save();
    }

    DB::commit();

    return response()->json(['status' => 'success']);
} catch (Throwable | Exception $e) {
    DB::rollBack();

    Log::error($e);

    return response()->json([
        'status' => 'error',
        'message' => $e->getMessage(),
    ], 500);
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Jon*_*han 5

在更新 Laravel 并尝试重写代码以查看我是否犯了一个愚蠢的错误之后,我最终发现创建数据库表的人将表引擎设置为MyISAM而不是InnoDB数据库事务所需的......我希望 Laravel 抛出一个错误,这样我就知道了,但这确实挽救了我的理智,并希望它对其他人有帮助。