Есть большой сайт. С крутой посещаемостью. Проблема такая:
1. Человек пополняет себе баланс через яндекс.
2. Человек открывает произвольную страницу, на которой идет выборка его модели с данными, типа $m=User:findByPk(Yii::app()->user->id) (очень условно).
3. В этот момент приходит коллбек от яндекса, который обновляет баланс пользователя.
4. А после этого скрипт из п.2. делает $m->save() и баланс снова сохраняется старый, потому что обновляются все аттрибуты модели, в т.ч. баланс.
И проблема была бы не проблемой, если б это было одно место. Можно было б обернуть в "select for update" внутри транзакции, и все. Но таких мест - сотня, и хрен знает, какое именно в данный момент затирает обновленный баланс . А все переделывать - уж больно долго, да и неправильно, ИМХО.
Соответственно, вопрос: как исключить из $m->save() сохранение отдельного аттрибута (например, balance)?
Исключить некоторые аттрибуты при сохранении модели
Re: Исключить некоторые аттрибуты при сохранении модели
$model->save(true, ['массив', 'с', 'аттрибутами']);