Прошло 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
Единственное решение, которое я имею в виду сейчас, - это удаление всех транзакций во всем родительском коде. Даже если я проигнорирую опасность, которую она представляет, время, необходимое для этого, выходит за рамки, поэтому я хотел бы убедиться, что другой альтернативы нет.
У кого-нибудь есть идеи, руководство, что-нибудь?
Спасибо за ваше время.