如何查找已开始的交易?

时间:2020-03-06 07:03:51

标签: laravel transactions isolation-level

控制器代码:

    public function update(ContractTypeStoreAndUpdateRequest $request, ContractType $contractType): ContractTypeResource
    {
        $contractType->is_active = $request->input('is_active');
        $contractType->name = $request->input('name');
        $contractType->short_name = $request->input('short_name');
        $contractType->description = $request->input('description');
        $pdo = DB::connection()->getPdo();
        $pdo->exec('SET TRANSACTION ISOLATION LEVEL READ COMMITTED');
        DB::beginTransaction();
        if ($request->has('feature')) {
            if ($contractType->contracts()->count() !== 0) {
                throw ValidationException::withMessages(
                    [
                        'feature' => 'Тип договора имеет привязанный договор изменить невозможно',
                    ]
                );
            }
            $contractType->feature = $request->input('feature');
        }

        $contractType->save();
        DB::commit();

        return ContractTypeResource::make($contractType);
    }

在对此进行测试时,出现以下错误:

活动的SQL事务:1568事务特征不能为 进行交易时更改了

我理解错误消息,但是我无法假设transaction可能从哪里开始? Laravel到底在用transaction做些什么(验证,认证)? 如何找到交易开始的地方?

1 个答案:

答案 0 :(得分:2)

我有原因。

我的测试使用此特征\Illuminate\Foundation\Testing\DatabaseTransactions

涵盖交易中的测试。最后会回滚以保持数据库干净。