Doctrine:如何将对象列值标记为脏?

时间:2010-08-26 10:12:18

标签: php doctrine

我在模型中有一个object类型的列。但是,如果我加载模型,并更改对象的属性,然后重新保存,它似乎不会重新序列化该对象。 e.g。

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

我认为这是因为它通过使用!==比较旧值和新值来检查修改,后者返回false,因为它们都是对同一对象的引用。

我可以在保存之前克隆对象,但显然必须有一种我错过的更明显的方法。

1 个答案:

答案 0 :(得分:4)

状态未更改,因为您不更新字段(仅参考)。如果您对如何发生感兴趣,请阅读 Doctrine_Record 类中的 set() _set()方法。

您可以使用 state()方法手动更改记录的状态:

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

这应该强制 save()来保留您的更改。