我有一个类型为 object 的列在模型中。但是如果我加载一个模型,并更改对象的一个属性,然后重新保存,它似乎并没有重新序列化该对象。例如
$model_instance = $table->find(1);
$object = $model_instance->object_column;
$object->someProp = 'new value';
$model_instance->save(); //has no effect
我认为这是因为它通过使用 !==
比较旧值和新值来检查修改,这会返回 false,因为它们都是对同一对象的引用。
我可以在保存之前克隆该对象,但显然我错过了一种更明显的方法。
最佳答案
状态不会改变,因为您没有更新字段(只是引用)。如果您对它是如何发生的感兴趣,请阅读 Doctrine_Record 类中的 set() 和 _set() 方法。
您可以使用state() 方法手动更改记录的状态:
$model_instance->state(Doctrine_Record::STATE_DIRTY);
这会强制 save() 保存您的更改。
关于php - Doctrine:如何将对象列值标记为脏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3574099/