教义如何合并不完整的数据

时间:2019-04-28 15:20:20

标签: php mysql symfony doctrine

我正在使用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,
...
}

如何有效地实现这一目标?

0 个答案:

没有答案