我有两个实体:Acquistion& priceHistory。 他们有如下多对多的关系:
Aquisition.php
....
/**
* @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
/**
* @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对象:
$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');
这给我以下错误:
Type error: Return value of App\Entity\PriceHistory::getAcquisitions() must be an instance of Doctrine\Common\Collections\ArrayCollection, instance of Doctrine\ORM\PersistentCollection returned
我该如何解决这个问题?
非常感谢你的帮助。
皮尔
答案 0 :(得分:1)
您的getAcquisitions()
方法中的返回类型提示错误,应为Collection
(ArrayCollection
实现)。
答案 1 :(得分:0)
你可以尝试,
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Acquisition", mappedBy="services")
*
* @ORM\JoinTable(name="relation_table_name")
*
*/
private $acquisitions;