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

Tom*_*igh 5 php doctrine

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

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

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

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

Jak*_*las 4

状态不会更改,因为您没有更新字段(仅更新引用)。如果您对它是如何发生感兴趣,请阅读Doctrine_Record类中的set()_set()方法。

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

$model_instance->state(Doctrine_Record::STATE_DIRTY);
Run Code Online (Sandbox Code Playgroud)

这应该会强制save()保存您的更改。