$ model-> delete () или $ model-> save () завершает процесс транзакции: 1305 SAVEPOINT trans3 не существует - PullRequest
0 голосов
/ 11 января 2019

Прошло 2 дня, сейчас я пытаюсь решить проблему и все еще не удается. Спасибо всем, кто может помочь в этом вопросе.

Ошибка
Я продолжаю получать это сообщение:
Doctrine\DBAL\Driver\PDOException : SQLSTATE[42000]: Syntax error or access violation: 1305 SAVEPOINT trans3 does not exist

Во время действия происходит сложный процесс, и мне нужно проверить несколько таблиц. Поскольку он выполняет несколько функций, процесс генерирует вложенные транзакции.

Я не первый раз использую транзакции, и даже вложенные транзакции, все работало до сих пор. Только эта функция вызывает ошибку.
Даже если я удалю the DB::beginTransaction() и его друзей из функции, у меня все еще будет ошибка. За исключением «trans3» становится «trans2».

Я уменьшил код функции до самого простого, чтобы вызвать ошибку:

public function doStuff(Stuff $stuff, User $user)
    {
        $thing = Thing::where('user_id', $user->id)
            ->where('other_id', $stuff->id)
            ->get()
            ->first();
        $thing->delete();

        return false;
}

Что я уже пробовал

  • Как видно из упрощенного кода, удаление DB :: beginTransaction и тому подобное не предотвращает ошибку.
  • Я также пытался установить операцию сохранения после изменения свойства с true на false, с $thing->fill(['property' => false]); $thing->save();, та же ошибка. Если свойство не изменилось по сравнению с тем, что находится в базе данных, нет ошибки (например, $thing->fill(['property' => true]); $thing->save(); не вызывает ошибки, потому что не инициировано обновление).
  • Я пытался использовать DB::raw('raw SQL'), без разницы.
  • Я пытался DB::delete('RAW SQL');, без разницы.

Техническая среда
Laravel 5.5
mysql Ver 15.1 Distrib 10.0.36-MariaDB, для debian-linux-gnu (x86_64) с использованием readline 5.2
PHP 7.0.32-0ubuntu0.16.04.1

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

У кого-нибудь есть идеи, руководство, что-нибудь?
Спасибо за ваше время.

1 Ответ

0 голосов
/ 17 апреля 2019

Этот ответ может прийти слишком поздно, но у меня возникла такая же проблема.

Только после того, как я решил попытаться удалить транзакцию, я обнаружил основную ошибку. Одна из вставок вызывала ошибку нарушения ограничения целостности, которая в моих тестах указывалась как SQLSTATE[42000]: Syntax error or access violation: 1305 SAVEPOINT trans2 does not exist.

После устранения основной ошибки я восстановил транзакцию, и все заработало.

...