это Атомарность, Согласованность, Изолированность и Долговечность (ACID). Говоря простым языком, любые действия, совершенные в рамках транзакции, гарантированно будут выполнены безопасно для базы данных, и на них не повлияют другие подключения к этой базе, даже если эти действия совершаются в несколько этапов.
$LAST_TR = ORM::forTable('transactions')->where('user_id', UID)->orderByDesc('time')->findOne();
$last_balance = $LAST_TR->balance; // это и есть актуальны баланс к которому нам нужно приплюсовать значение аргумента метода.
Собственно как лучше построить базу для фиксирования истории транзакций и сохранения конечного баланса? так чтобы нельзя было совершить какие либо махинации с одновременными запросами?
мой изначальный вариант скрипта в базе хранит лог транзакций, где в последней строке лога прописан актуальный баланс, сумма пополнения или списания, и для сверки старый баланс (нужен по сути только для тестов) по большей части нет разницы где будет баланс прописан, в этой же таблице или нет, в моем случае просто есть лишний столбец который можно заменить отдельной ячейкой таблицы например таблица пользователей