成功将json字符串反序列化为具有关联的Doctrine实体后。坚持时,Doctrine始终将这些关联检测为“新实体”。我如何仅通过ID更新关联,并且如果有任何更改,不更改相关的实体值?使用JMSSerializer反序列化的关联持久化Doctrine实体
我的情况:
我有一些数据库表与静态数据。最简单的是存储单位。 (我有一个称为单位的学说实体)。该表是这样的:
|id|name |ratio |
|1 |mgr |1 |
|2 |gr |1000 |
|3 |Kgr |1000000|
然后,用户可以创建一个项目,其中也有被称为单元的一个服务器端的学说实体。我用一个客户端Backbone.js的模型和更新时,它的发到我的Symfony2应用程序是这样的:
//Item object to be serialized into Item entity
{
id: 13141
weight: 100
unit: {
id:1
name:mgr
ratio:1
}
//many more attributes here
}
现在,我反序列化与JMSSerializer,一切都没有问题,但我想学说只更新的设备ID关系,而不是整个单位。
当我坚持时,主义抱怨并告诉我他找到了一个“新单位实体”(这不是我想要的),并告诉我在教义实体中设置级联为persist
。 但是,如果我这样做,有人修改单位JSON,不会改变我的静态单位表?
例如:错误的用户通过发送这个修改JSON:
//BAD item object to be serialized into Item entity
{
id: 13141
weight: 100
unit: {
id:1
name:BadName //Will this get persisted to the database?
ratio:1
}
//many more attributes here
}
我当然不希望这种事情发生。我只想将ID为1的单元添加到该项目。
这种情况很简单,我可以通过Id获取单元,然后将其设置为实体,但在我的真实应用中,Item实体更大,所以我想自动处理它。
¿任何想法?