-->

Doctrine2 ORM忽略合并关系(Doctrine2 ORM Ignore relations

2019-11-03 02:31发布

我实现一个REST API与FOSRestBundle和我所遇到的与现有实体(PUT)的修改问题

我有一个类学生与有多对一关系

/**
 * @JMS\MaxDepth(2)
 * @ORM\ManyToOne(targetEntity="ClassRoom", inversedBy="students")
 * @ORM\JoinColumn(name="classroom_id", referencedColumnName="id")
 */
protected $classRoom;

当执行PUT动作,我只收到属性的值,因为我不想让用户通过PUT请求修改关系。 这是一个接收到的数据的例子。

{
"id": 3,
"name": "pelayo",
"second_name": "ramon",
"last_name": "fernandez",
"birthday": "1983-08-15T00:00:00+0200"
}

数据获取与JMS串行至极反序列化设置$教室属性为null,因为它没有接收到的数据中找到它。

当执行合并

$student2 = $this->get('doctrine')->getManager()->merge($student);

如果STUDENT2得到坚持用教室当前关系会从数据库中,因为合并设置的关系为null删除。

这种行为可以通过检索当前的教室,并用手在合并之前将其设置为反序列化实体被躲闪,但是这是丑陋的。

有没有办法告诉学说,从分离的一个忽略合并的属性,使其始终使用储值?

Answer 1:

合并是不是唯一的解决办法。

该JMSSerializerBundle包括学说实体对象的构造函数。 当您启用此构造函数,反序列化的实体管理,可坚持(与实体$em->persist($student) )。 改性的反序列化实体的唯一的属性是从该请求的JSON提到的那些。

这里是你可以启用它。



文章来源: Doctrine2 ORM Ignore relations in Merge