@knowledge

Обновится ли запись в бд в yii?

Скажите, будет ли обновлена запись в бд в такой конструкции, если данные остаются те же

В бд
User
id=1
name='john'
age=29

В коде
$user = User::find(1):
$user->name='john'
$user->age=29
$user->save():

Произойдёт ли обновление бд?
Если да, есть ли возможность как то это отклонить?

Идет обновление большого количества моделей, какие то данные в некоторых моделях обновлены, в некоторых нет
Если не обновлены, не хотелось бы записывать лишний раз
  • Вопрос задан
  • 49 просмотров
Решения вопроса 1
slo_nik
@slo_nik Куратор тега Yii
Добрый вечер.
Проверяйте oldAttributes(). Если они совпадают с новыми атрибутами, то прерывайте работу скрипта. Если не совпадают - обновляйте.
В действии update можно сделать такую проверку
if(empty($model->getDirtyAttributes())){
                // если данные не обновляются, то делайте что Вы желаете)))
            }
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@sidni
Php Developer
По-идеи не должно (для точности можете дебагерром проверить был ои запрос) в юии2 есть проверка dirty-attributes и если атрибут не измненил значение и тип то он не является dirty
Ответ написан
Комментировать
@Mysterion
Да, будут обновлены. Более того, в yii, если речь о первой версии фреймворка, есть неприятная особенность - если Вы будете доставать из базы запись через active record, менять только одно поле и сохранять запись снова, то в базу уйдет запрос с update'ом всех полей, но изменится при этом только одно.
Избежать можно, например, сравнивая поля и значения в контроллере, если речь о небольшом количестве полей и временном решении или добавлении в модель методов afterFind и beforeSave. Сохраняйте в afterFind $this->attributes в какую-нибудь приватную переменную и в beforeSave проверяйте $this->attributes со значением этой переменной.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы