Последние пару дней я пытался создать двунаправленные отношения ManyToOne-OneToMany в Symfony 3.4. У меня есть две сущности.Один - это вклад, а другой - источник.Вклад может иметь несколько источников.Таким образом, отношение должно быть
Contribution - ManyToOne - Source - OneToMany - Contribution
Но я продолжаю получать следующую ошибку во время $em→flush();
в моем контроллере:
Ошибка типа: аргумент 1, передаваемый в Doctrine \ Common \ Collections \ ArrayCollection :: __ construct (), должен иметь массив типов, данный объект вызывается в / var / www / html / Edebate / vendor / doctrine /orm / lib / Doctrine / ORM / UnitOfWork.php в строке 605
У меня нет метода set, связанного с коллекцией Array, в моем Entity Contribution, как я мог видеть в других постах здесь:
Ошибка типа: Аргумент 1 передан в Doctrine \ Common \ Collections \ ArrayCollection :: __ construct () должен иметь массив типов, данный объект
Symfony-CatchableНеустранимая ошибка: Аргумент 1, передаваемый в Doctrine \ Common \ Collections \ ArrayCollection :: __ construct (), должен иметь тип массива, заданный объект
И аннотации в порядке, как указано здесь:
Ошибка отношений Doctrine OneToMany
Любая помощь будет признательна!:)
Вот мой вклад сущности
use Doctrine\Common\Collections\ArrayCollection;
//annotations
abstract class Contribution
{
/**
* @ORM\OneToMany(targetEntity="Shaker\DebateBundle\Entity\Source", mappedBy="parent")
*/
protected $sources;
//Other attributes and methods
public function __construct() {
$this->sources = new ArrayCollection();
}
/**
* Add source
*
* @param \Shaker\DebateBundle\Entity\Source $source
*
* @return Contribution
*/
public function addSource(\Shaker\DebateBundle\Entity\Source $source)
{
$this->sources[] = $source;
return $this;
}
/**
* Remove source
*
* @param \Shaker\DebateBundle\Entity\Source $source
*/
public function removeSource(\Shaker\DebateBundle\Entity\Source $source)
{
$this->sources->removeElement($source);
}
/**
* Get sources
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getSources()
{
return $this->sources;
}
}
И это в моем источнике сущности:
/**
* @ORM\ManyToOne(targetEntity="Shaker\DebateBundle\Entity\Contribution", inversedBy="sources")
*/
protected $parent;
/**
* Set parent
*
* @param \Shaker\DebateBundle\Entity\Contribution $parent
*
* @return Contribution
*/
public function setParent(\Shaker\DebateBundle\Entity\Contribution $parent = null)
{
$this->parent = $parent;
$parent->addSource($this);
return $this;
}
/**
* Get parent
*
* @return \Shaker\JRQBundle\Entity\Contribution
*/
public function getParent()
{
return $this->parent;
}
И в моем контроллере проблема возникает с flush:
$formsourcebook->handleRequest($request);
$contributionid=$formsourcebook->get('ContributionId')->getData();
if ($formsourcebook->isValid()) {
$topicargtarget=$this->getContribution($contributionid);
$sourcebook->setUser($user);
$sourcebook->setContribution($topicargtarget);
$em->persist($sourcebook);
$em->flush();
}