Доктрина: Как пометить значение столбца объекта как грязное? - PullRequest
5 голосов
/ 26 августа 2010

У меня есть столбец типа объект в модели. Но если я загружаю модель и изменяю свойство объекта, а затем повторно сохраняю, кажется, что этот объект не сериализуется повторно. например,

$model_instance = $table->find(1);
$object = $model_instance->object_column;
$object->someProp = 'new value';
$model_instance->save(); //has no effect

Я думаю, это потому, что он проверяет модификацию, сравнивая старые и новые значения, используя !==, который возвращает false, потому что они обе являются ссылками на один и тот же объект.

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

1 Ответ

4 голосов
/ 27 августа 2010

Состояние не изменяется, потому что вы не обновляете поле (только ссылка).Если вам интересно, как это происходит, прочитайте set () и _set () в Doctrine_Record class.

Вы можете вручную изменитьсостояние записи с помощью метода state () :

$model_instance->state(Doctrine_Record::STATE_DIRTY);

Это должно заставить save () сохранить ваши изменения.

...