我在模型中有一个object类型的列。但是,如果我加载模型,并更改对象的属性,然后重新保存,它似乎不会重新序列化该对象。 e.g。
$model_instance = $table->find(1);
$object = $model_instance->object_column;
$object->someProp = 'new value';
$model_instance->save(); //has no effect
我认为这是因为它通过使用!==
比较旧值和新值来检查修改,后者返回false,因为它们都是对同一对象的引用。
我可以在保存之前克隆对象,但显然必须有一种我错过的更明显的方法。
答案 0 :(得分:4)
状态未更改,因为您不更新字段(仅参考)。如果您对如何发生感兴趣,请阅读 Doctrine_Record 类中的 set()和 _set()方法。
您可以使用 state()方法手动更改记录的状态:
$model_instance->state(Doctrine_Record::STATE_DIRTY);
这应该强制 save()来保留您的更改。