Код: Выделить всё
public function actionIndex()
{
$model = Counter::model();
$transaction = $model->dbConnection->beginTransaction();
$Counter = $model->findByPk(1);
$Counter->value++;
sleep(10);
$Counter->save();
$transaction->commit();
$this->render('index');
}
Изначально поле "value" в таблице Counter равно 0. Так вот если запустить такой контроллер два раза и одновременно, то по завершению выполнения обоих контроллеров в поле "value" будет стоять значение 1. Получается, транзакции при одновременном выполнении двух контроллеров не блокируют друг друга, а выполняются параллельно. В итоге они обе получают ноль, ждут 10 секунд, а потом записывают обновленное значение, то есть 1. Но мне нужно, чтобы в результате получалась двойка.То есть, чтобы когда начиналась первая транзакция, то вторая блокировалась бы и уже после завершения первой, запускалась вторая, получая обновленное значение (1), увеличивала бы его еще на 1 и уже записывала в поле значение "2".