@Baklajan888

Как решить проблему с БД?

Доброго времени суток!
Проблема заключается в том, что запрос к БД не успевает обрабатываться, и при повторном запросе учитывается старое значение. Чаще всего она возникает в тот момент, когда пользователь отправил несколько запросов одновременно.

Пример:
SB94jOh.png

Должно быть так:
piIAEeQ.png

Мой код:
IfUrTPa.png

Можете подсказать, что я делаю не так и как решить проблему?
  • Вопрос задан
  • 165 просмотров
Пригласить эксперта
Ответы на вопрос 2
Fragster
@Fragster
помогло? отметь решением!
Нужно начать транзакцию и залочить юзера перед чтением и проверкой баланса, в конце операции - зафиксировать транзакцию.
https://laravel.com/docs/8.x/database#manually-usi...
https://laravel.com/docs/8.x/queries#pessimistic-l... (lockForUpdate())
Ответ написан
Комментировать
@tukreb
Самое простое решение использовать оптимистическую блокировку таблиц.
В доктрине это доступно из коробки https://www.doctrine-project.org/projects/doctrine...
Для ларки ищите сторонние решения типо https://github.com/reshadman/laravel-optimistic-locking

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы