У меня есть форма, где я могу обновить свои сущности. Когда я делаю сброс своей сущности перед сбросом, моя сущность и все ее отношения в порядке. Их значения обновляются, а идентификаторы соответствуют отправленной форме. Но когда я сбрасываю сущность и заглядываю в базу данных, дела идут странно.
Например, в своей форме я гидратирую ее своим Fiche ID 1, который прикреплен к моему идентификатору Demandeur 1. В моем бланке издания я хочу прикрепить Fiche ID 1 к идентификатору Demandeur 2 и иметь возможностьизменить значения Демандера ID 2 тоже. Как я уже сказал, если я выбрасываю Fiche, я вижу, что у Demandeur есть ID 2 с обновленными значениями. При отправке в базе данных Fiche ID 1 по-прежнему привязан к Demandeur 1, а обновленные значения Demandeur 2 установлены на Demandeur ID 1.
Мои сущности:
class FicheSynthese
{
/**
* @var int
*
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
protected $id;
/**
* @var \Demandeur
*
* @ORM\ManyToOne(targetEntity="Demandeur",
* inversedBy="ficheSynthese", cascade={"persist"})
* @ORM\JoinColumn(name="idDemandeur", referencedColumnName="id")
*/
private $demandeur;
public function getDemandeur(): ?Demandeur
{
return $this->demandeur;
}
public function setDemandeur(?Demandeur $demandeur): self
{
$this->demandeur = $demandeur;
return $this;
}
}
class Demandeur
{
/**
*@var int
*
*@ORM\Id
*@ORM\GeneratedValue(strategy="AUTO")
*@ORM\Column(type="integer")
*/
private $id;
/**
*@var Collection|FicheSynthese[]
*
*@ORM\OneToMany(targetEntity="FicheSynthese", mappedBy="demandeur", cascade={"persist"})
*
*/
private $ficheSynthese;
public function __construct()
{
$this->ficheSynthese = new ArrayCollection();
}
/**
* @return Collection|FicheSynthese[]
*/
public function getFicheSynthese(): Collection
{
return $this->ficheSynthese;
}
public function addFicheSynthese(FicheSynthese $ficheSynthese): self
{
$ficheSynthese->setDemandeur($this);
if (!$this->ficheSynthese->contains($ficheSynthese)) {
$this->ficheSynthese->add($ficheSynthese);
}
return $this;
}
public function removeFicheSynthese(FicheSynthese $ficheSynthese): self
{
if ($this->ficheSynthese->contains($ficheSynthese)) {
$this->ficheSynthese->removeElement($ficheSynthese);
// set the owning side to null (unless already changed)
if ($ficheSynthese->getDemandeur() === $this) {
$ficheSynthese->setDemandeur(null);
}
}
return $this;
}
}
В моемконтроллер, на данный момент у меня есть две формы, одна для Fiche и одна для Demandeur (я работаю над встроенной версией).
$em = $this->getDoctrine()->getManager('fichesynthese');
$formFS = $this->createForm(FicheSyntheseType::class, $fs);
$formFS->handleRequest($request);
$dem = $fs->getDemandeur(); //Demandeur ID 1
$formsDem = $this->generateFormsDem($request, $dem);
$formsDem->handleRequest($request);
if ($formFS->isSubmitted() && $formFS->isValid()) {
if(condition to a new Demandeur) {
$newDem = $formsDem->getData(); // Demandeur ID 2
$fs= $formFS->getData();
$newDem->addFicheSynthese($fs); // Attach Fiche ID 1 to Demandeur ID 2
}
$em->persist($fs);
$em->flush();
return $this->redirectToRoute('fichsynth_accueil');
}
Я использовал функцию addFicheSynthese, потому что Demandeur владеет отношением между Fiche и Demandeur. Я подозреваю, что проблема с идентификационной картой менеджера организации Demandeur. Как я могу сказать Doctrine для сопоставления менеджера сущности Demandeur с правильным идентификатором Demandeur?