Исключить некоторые аттрибуты при сохранении модели

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
anagamin
Сообщения: 56
Зарегистрирован: 2012.01.19, 12:25

Исключить некоторые аттрибуты при сохранении модели

Сообщение anagamin »

Есть большой сайт. С крутой посещаемостью. Проблема такая:
1. Человек пополняет себе баланс через яндекс.
2. Человек открывает произвольную страницу, на которой идет выборка его модели с данными, типа $m=User:findByPk(Yii::app()->user->id) (очень условно).
3. В этот момент приходит коллбек от яндекса, который обновляет баланс пользователя.
4. А после этого скрипт из п.2. делает $m->save() и баланс снова сохраняется старый, потому что обновляются все аттрибуты модели, в т.ч. баланс.

И проблема была бы не проблемой, если б это было одно место. Можно было б обернуть в "select for update" внутри транзакции, и все. Но таких мест - сотня, и хрен знает, какое именно в данный момент затирает обновленный баланс :). А все переделывать - уж больно долго, да и неправильно, ИМХО.

Соответственно, вопрос: как исключить из $m->save() сохранение отдельного аттрибута (например, balance)?
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Исключить некоторые аттрибуты при сохранении модели

Сообщение urichalex »

$model->save(true, ['массив', 'с', 'аттрибутами']);
Ответить