首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony 4-具有ManyToMany关系的对象的序列化

Symfony 4-具有ManyToMany关系的对象的序列化
EN

Stack Overflow用户
提问于 2018-06-09 00:19:27
回答 2查看 1.3K关注 0票数 0

我有两个实体: Acquistion和priceHistory。它们具有多对多关系,如下所示:

Aquisition.php

代码语言:javascript
复制
....
    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\PriceHistory", inversedBy="acquisitions")
     * @MaxDepth(1)
     */
    private $services;
    public function __construct()
    {
        $this->services = new ArrayCollection();
        ....
    }

   /**
     * @return Collection|ServicePrice[]
     */
    public function getServices(): Collection
    {
        return $this->services;
    }

    public function addService(ServicePrice $service): self
    {
        if (!$this->services->contains($service)) {
            $this->services[] = $service;
        }

        return $this;
    }

    public function removeService(ServicePrice $service): self
    {
        if ($this->services->contains($service)) {
            $this->services->removeElement($service);
        }

        return $this;
    }

PriceHistory.php

代码语言:javascript
复制
    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\Acquisition", mappedBy="services")
     */
    private $acquisitions;

    public function __construct(){
        $this->acquisitions = new ArrayCollection();
    }

   /**
     * @return Collection|Acquisition[]
     */
    public function getAcquisitions(): Collection
    {
        return $this->acquisitions;
    }

    public function addAcquisition(Acquisition $acquisition): self
    {
        if (!$this->acquisitions->contains($acquisition)) {
            $this->acquisitions[] = $acquisition;
            $acquisition->addService($this);
        }

        return $this;
    }

    public function removeAcquisition(Acquisition $acquisition): self
    {
        if ($this->acquisitions->contains($acquisition)) {
            $this->acquisitions->removeElement($acquisition);
            $acquisition->removeService($this);
        }

        return $this;
    }

它工作正常,模式创建正确,实体持久化,等等。

但是我想序列化和反序列化Acquiisition对象,如下所示:

代码语言:javascript
复制
$encoders = array(new JsonEncoder());
        $objectNormalizer = new ObjectNormalizer(); 
        $objectNormalizer->setCircularReferenceHandler(function ($object) {
            return $object->getId();
        });
        $normalizers = array(new DateTimeNormalizer(), $objectNormalizer);
        $serializer = new Serializer($normalizers, $encoders);
        $tempCart = new Acquisition();
        $service_prices = $this->getDoctrine()->getRepository(ServicePrice::class)->findAll()[0];
        $tempCart->addService($service_prices);
        $jsonContent = $serializer->serialize($tempCart, 'json');

这会给我以下错误:

代码语言:javascript
复制
Type error: Return value of App\Entity\PriceHistory::getAcquisitions() must be an instance of Doctrine\Common\Collections\ArrayCollection, instance of Doctrine\ORM\PersistentCollection returned

我该怎么解决这个问题呢?

非常感谢你的帮助。

皮埃尔

EN

回答 2

Stack Overflow用户

发布于 2018-06-09 00:24:06

您的getAcquisitions()方法中的返回类型提示错误,它应该是Collection ( ArrayCollection实现的)。

票数 1
EN

Stack Overflow用户

发布于 2018-06-10 20:22:42

你可以试一试

代码语言:javascript
复制
/**
 * @ORM\ManyToMany(targetEntity="App\Entity\Acquisition", mappedBy="services")
 *
 * @ORM\JoinTable(name="relation_table_name")
 *
 */
private $acquisitions;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50764745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档