如何查找已开始的交易?

问题描述 投票:0回答:1

控制器代码:

    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做一些事情(验证,认证)?如何找到交易开始的地方?

laravel transactions isolation-level
1个回答
2
投票

我有原因。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.