Как сохраняя activeRecord в Yii1 обновлять только измененные поля?

130
29 апреля 2021, 21:10

В проекте начали присходить ошибки перезаписи данных. Например пока выполняется долгая транзакция в которой мы, кроме всего другого, обновляем клиенту статус на 'status2', в месте в другом методе, который был запущен позже транзакции есть код:

$client = Client::model()->findByPk($clientId);
$client->name = 'Вася';
$client->save(false);

В итоге статус перезаписывается обратно на 'status1'. Потому-что activeRecord обновляет все поля.

Что бы обновить только name, мы должны прописать:

$client->save(false, ['name']);

Во многих местах проекта есть похожий код:

$client->doSomething();
//В методе doSomething, например код:
//$this->status = 'someStatus';
//$this->someField = 'value';
$client->save(false);

При сохранении клиента мы не можем написать перечень полей, т.к. в самом методе doSomething не происходит сохранения, а оно происходит снаружи и нам придется при каждом изменении метода, менять массив полей для сохранения везде где он применяется.

Есть ли способ обновлять только те поля, которые были изменены? В yii2 есть метод getDirtyAttributes который возвращает изменные поля, но как это сделать в Yii1?

READ ALSO
информации о фильмах на новой странице

информации о фильмах на новой странице

Подскажите по этому проекту кое что (https://githubcom/annbin000/cinema_mvc)

131
Авто логин в приложении android

Авто логин в приложении android

Нужно сделать авто логин в приложенииСоздано оно на Android Studio и авторизация на Firebase

89