Как найти запущенную транзакцию? - PullRequest
0 голосов
/ 06 марта 2020

Код контроллера:

    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 Ответ

2 голосов
/ 06 марта 2020

У меня есть причина.

Мои тесты используют эту черту \Illuminate\Foundation\Testing\DatabaseTransactions

Он охватывает тест в транзакции. В конце концов, выполняется откат для поддержания базы данных в чистоте.

...