我正在使用Symfony 4.2和Doctrine作为ORM创建连接到MySQL数据库的REST api。我接收JSON中的数据,使用JMSSerializer反序列化它们,并使用主义合并功能将其附加。如何合并从JSON获得的实体与现有实体,仅更新JSON中的给定字段?
事件实体
<?php
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation\Type;
/**
* Event
*
* @ORM\Table(name="Event", indexes={@ORM\Index(name="Organiser", columns={"Organiser"})})
* @ORM\Entity
*/
class Event
{
/**
* @var int
*
* @ORM\Column(name="ID", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue
* @Type("int")
*/
private $id;
/**
* @var \Invited
*
* @ORM\OneToMany(targetEntity="Invited",mappedBy="event",cascade={"persist","merge","remove"})
* @Type("ArrayCollection<App\Entity\Invited>")
*/
private $guests;
/**
* @var string
*
* @ORM\Column(name="Title", type="string", length=255, nullable=false)
* @Type("string")
*/
private $title;
/**
* @var \DateTime
*
* @ORM\Column(name="StartDate", type="datetime", nullable=false)
* @Type("DateTime")
*/
private $startdate;
/**
* @var \DateTime|null
*
* @ORM\Column(name="EndDate", type="datetime", nullable=true)
* @Type("DateTime")
*/
private $enddate;
/**
* @var string
*
* @ORM\Column(name="Place", type="string", length=255, nullable=false)
* @Type("string")
*/
private $place;
/**
* @var string|null
*
* @ORM\Column(name="ImagePath", type="string", length=255, nullable=true)
* @Type("string")
*/
private $imagepath;
/**
* @var \User
*
* @ORM\ManyToOne(targetEntity="User",cascade={"persist"})
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="Organiser", referencedColumnName="ID")
* })
* @Type("App\Entity\User")
*/
private $organiser;
?>
反序列化
$json = $request->getContent();
$serializer = SerializerBuilder::create()->build();
$event = $serializer->deserialize($json,'App\Entity\Event','json');
合并
$feedback = $this->em->merge($newEvent);
$this->em->flush();
预期结果与实际结果:
如果我已有一个已存在且已附加的事件,例如:
{
id:1,
title: 'oldTitle',
startDate: oldDate,
place: 'oldPlace',
...
}
我收到:
{
id:1,
title: 'newTitle'
}
预期结果:
{
id:1,
title: 'newTitle',
startDate: oldDate,
place: 'oldPlace',
...
}
查看数据库时的实际结果:
{
id:1,
title: 'newTitle',
startDate: null,
place: null,
...
}
如何有效地实现这一目标?