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

标签 php doctrine

我有一个类型为 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/

相关文章:

php - 在 PHP 中合并 3 个数组

php - Symfony2 - 无法更新 Doctrine 模式。基表或 View 已存在

mysql - symfony 无法以多对多关系连接相关表

php - 如何减少 Doctrine 执行的查询数量?

mysql - Symfony2 + Doctrine 选择性关系形式

php - 在 while 循环中使用 array_push() 插入两个值时遇到问题

php - 使用更新批处理对 codeigniter 进行多次更新

php - Laravel,如何通过外键显示名称字段

php - 英镑符号显示为问号 PHP

php - 获取 blob 类型的 Doctrine 实体属性只返回一次数据