База данных postgres9.6.
Использую стандартный механизм транзакций
Мне нужно логировать начисления в баланс пользователя, на каждое новое начисление создаётся новая запись
Код: Выделить всё
$transaction = Yii::$app->db->beginTransaction();
try {
// получаем текущий баланс пользователя
$sql = 'SELECT balans FROM balance WHERE user_id=1 ORDER BY timestamp DESC LIMIT 1 for update';
$currentBalance = Yii::$app->db->createCommand($sql )->queryScalar();
$u = new Balance();
$u->user_id = 1;
$u->balans = $currentBalance + 100;
$u->save();
$transaction->commit();
} catch (\Exception $e) {
$transaction->rollBack();
}
если делать последовательный запрос, то начисления проходят норм, т.е
----------------
id | user_id | balance
1 | 1 | 0
2 | 1 | 100
3 | 1 | 200
но если делать параллельные запросы, допустим с начисление 100, то получается такая картина
id | user_id | balance
1 | 1 | 0
2 | 1 | 100
3 | 1 | 100
Получается что в обеих транзакция он видит текущий баланс 0. Что я делаю не так?