@hermaeus_seeker

Что сделать, если транзакции перезаписывают результаты друг-друга в Yii2:?

Логика:
Баланс пользователя: $0.
Пользователь пополняет баланс на: $1000.
Есть ReplenishListener, который "слушает" все пополнения, и за определенные даёт бонус, в данном случае: $50.

Проблема: Зачисление платежа, бонус за платеж - обернуты в одну транзакию. И перезаписывают друг-друга.
Запрос №1: Добавляет к балансу $50.
Запрос №2: Всё ещё считает, что баланс пользователя $0, а не $50, и начисляет $1000.
Итог: баланс пользователя $1000, а не $1050.

btP5SnM.png

Конечно, можно написать:
Yii::$app->db->createCommand("UPDATE `user` SET `balance`= `balance` + :sum WHERE `id`=:uid")
            ->bindValue(":uid", $userId)
            ->bindValue(":sum", $sum)
            ->execute();


Но этот подход сохранит баланс "в обход" всех Событий и Поведений. Баланс сейчас добавляется так:
eKTGMf6.png

Как поступить в данной ситуации?
  • Вопрос задан
  • 50 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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