Транзакция Laravel сохраняет данные в БД даже в случае отката - PullRequest
0 голосов
/ 27 сентября 2019

Я отправляю запрос, пытаясь сохранить несколько документов одновременно.

Вот мой код

DB::beginTransaction();

try {
    foreach ($request->documents as $index => $documentInfo) {
        // Check
        if (// some statement) {

            $documentExists = Document::where([
                // some checks
            ])
            ->exists();

            if ($documentExists) {
                throw new \Exception("Error Processing Request", 1);
            }
        }


        // Assign document properties

        $document->save(); 
    }

    DB::commit();
} catch (\Exception $e) {
    DB::rollBack();

    if ($request->ajax()) {
        return response()->json([
            'success' => false, 
            'document' => $index,
            'message' => '// message',
        ]);
    }

    return redirect()->back()->with('error', '// message');
}

Дело в том, что я проверяю каждый документ на его собственные уникальные значения,Если два документа с одинаковыми значениями пытаются сохранить, я хочу вернуть ошибку.Я попытался загрузить два документа с одинаковыми значениями, ошибка возвращается во втором документе, и транзакция должна завершиться неудачно, но первый документ сохраняется в базе данных.Я не хочу этого, если есть ошибка, я не хочу, чтобы какие-либо документы сохранялись в БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...