if ($type == $model::DEPOSIT || $type == $model::BILLING) {
$this->_user->$account += $amount;
}
else {
$this->_user->$account -= $amount;
}
// Обновляем счет пользователя
$this->_user->save(false);
Вот тут подвох. Предыдущий баланс сохраняется в переменную, затем инкремент/декремент переменной и запись нового значения.
Yii делает запрос вида
UPDATE user SET balance = $new_balance...
А вам необходимо делать запрос вида
UPDATE user SET balance = balance - $amount WHERE balance >= $amount AND user_id = 1
И смотрите, если баланс пользователя больше суммы, которую он хочет провести, то запрос вам вернет единицу, т.е. отредактирована одна запись. Тогда можно делать добавление баланса второму пользователю, иначе есть подвох и не одобряем перевод.
UPDATE user SET balance = balance + $amount WHERE user_id = 2
И затем сохраняем саму запись перечеслия в таблицу. Все это дело оборачиваем в транзакцию и счастливы.