Есть вот такой код для обновления баланса
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.