@galliard

Почему Doctrine обрабатывает запрос, но данные в БД не меняются?

Есть вот такой код для обновления баланса

public function up(Account $account, int $amount): void
{
    $query = sprintf(
        'UPDATE %s t SET t.balance = t.balance + %d WHERE t.id = %d',
        get_class($account),
        $amount,
        $account->getId(),
    );

    $this->entityManager->createQuery($query)
        ->execute();
}


Он простой, как тапочек, и казалось бы, что там может не работать? Но... он не работает! Ну то есть он выполняется, конечно, никаких ошибок и эксепшнов не вылетает, $this->entityManager->createQuery($query)->execute() возвращает 1.

Но фактически данные в базе не обновляются. И я не могу понять почему. Пробовал и в транзакцию заворачивать, и блокировки ставить, и на нативный SQL переписывал, что только не дела - а результат один: скрипт отрабатывает, а данные в базе не меняются.

Обновление баланса вызывается последней функцией в бизнес-логике, когда уже сделан flush сущностей и другие sql-запросы. И все они выполнились и сохранились а БД.

Если завернуть его в одну транзакцию с flush сущностей и другими sql-запросами - результат тот же: все данные сохраняются, кроме баланса, обновляемого этой функцией. У меня уже закончились инструменты для отладки, я не знаю куда еще можно смотреть. В чем может быть причина такого поведения?

База postgres 15.1.
  • Вопрос задан
  • 74 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы