我用现有的实体创建一个新实体Id
,我想更新相关的数据库记录。
教义merge一直是我最好的朋友:识别是否有更改并生成正确的更新查询。
$entity = new Entity();
$entity->setId(1);
$entity->setName('test');
$EntityManager->merge($entity);
$EntityManager->flush();
假设 id=1 的元素已经存在于数据库中:如果名称与“test”不同,Doctrine 会生成以下查询:
UPDATE table SET name = ? WHERE id = ? ["test","1"]
如果我再次运行上面的代码,Doctrine 会识别出没有任何更改,并且没有提交任何查询。
But...当我设置 DateTime 字段时,Doctrine 认为它已更改并始终运行更新查询:
$entity = new Entity();
$entity->setId(1);
$entity->setDate(new \DateTime(2000-01-01));
$EntityManager->merge($entity);
$EntityManager->flush();
//* ALWAYS commits this query:
>> UPDATE table SET date = ? WHERE id = ? ["2000-01-01 00:00:00","1"]
您知道如何避免这种无用的更新吗?谢谢!
显然这似乎是 Doctrine 中的一个错误,尚未解决(参考Github)
这是预期的行为,对象通过引用进行比较
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)