Итак, у меня есть приложение Symfony 4, в котором лежит моя основная сущность Structure
.У него есть свойство $referent
(в основном контактная информация), хранящееся со следующей ассоциацией:
/**
* @ORM\OneToMany(targetEntity="App\Entity\Referent", mappedBy="structure", cascade={"persist"})
*/
private $referent;
с его получателями и установщиками:
/**
* @return Collection|Referent[]
*/
public function getReferent(): Collection
{
return $this->referent;
}
public function addReferent(Referent $referent): self
{
if (!$this->referent->contains($referent)) {
$this->referent[] = $referent;
$referent->setStructure($this);
}
return $this;
}
public function removeReferent(Referent $referent): self
{
if ($this->referent->contains($referent)) {
$this->referent->removeElement($referent);
// set the owning side to null (unless already changed)
if ($referent->getStructure() === $this) {
$referent->setStructure(null);
}
}
return $this;
}
Обратите внимание, что весь код был автоматическигенерируется $ php bin/console make:entity
.
Проблема заключается в том, что всякий раз, когда я сохраняю новую Structure
форму StructureType
, которая содержит несколько форм ReferentType
(согласно документации ), обе *Объекты 1017 * и Referent
сохраняются в базе данных, за исключением того, что для structure_id
в таблице referent
установлено значение NULL
согласно приведенному ниже снимку экрана.
Вот действие контроллера, которое обрабатывает отображение и отправку форм:
/**
* @Route("/add", name="back_add")
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function add(Request $request)
{
$structure = new Structure();
$form = $this->createForm(StructureType::class, $structure, [
'attr' => ['id' => 'add-form'],
]);
$form->handleRequest($request);
if ($form->isSubmitted()) {
$structure = $form->getData();
$manager = $this->getDoctrine()->getManager();
$manager->persist($structure);
$manager->flush();
return $this->redirectToRoute('back_update', ['id' => $structure->getId()]);
}
return $this->render('back/add.html.twig', [
'form' => $form->createView(),
'action' => __FUNCTION__,
]);
}
Так почему это так?
Кроме того, обратите внимание, что перед добавлением , cascade={"persist"}
В аннотации отношений у меня была следующая ошибка при отправке формы:
Любая помощь будет высоко ценится.
Edit # 1
В соответствии с просьбой, здесь обратная сторона отношения:
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Structure", inversedBy="referent")
*/
private $structure;
Witч его геттеры и сеттеры:
public function getStructure(): ?Structure
{
return $this->structure;
}
public function setStructure(?Structure $structure): self
{
$this->structure = $structure;
return $this;
}