如何找到开始的交易?

How to find started transaction?

控制器代码:

    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);
    }

当我 运行 测试这个点时,我收到以下错误:

Active sql transaction: 1568 Transaction characteristics can't be changed while a transaction is in progress

我理解错误消息,但我无法假设 transaction 之前可能从哪里开始? Laravel 在幕后对 transaction 做些什么(验证、身份验证)? 如何找到之前开始交易的地方?

我明白了。

我的测试使用了这个特性\Illuminate\Foundation\Testing\DatabaseTransactions

它涵盖了交易中的测试。最后回滚以保持数据库清洁。