I have a oneToMany - ManyToOne relation between two entities.
When editing on the Departement edit page (owning side, ManyToOne), changes will be saved into the departement table,
but editing from the Utilisateur edit page (inverse side, OneToMany), changes won't be saved into the Departement table.
Can someone exmplain me why it's not working?
<kbd>src/AppBundle/Entity/Utilisateur.php</kbd>
class Utilisateur implements UserInterface, \Serializable {
/**
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Departement", mappedBy="commercial")
*/
private $departements;
/**
* Constructor
*/
public function __construct() {
$this->departements=new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* @param \AppBundle\Entity\Departement $departement
* @return Utilisateur
*/
public function addDepartement(\AppBundle\Entity\Departement $departement)
{
$this->departements[] = $departement;
return $this;
}
/**
* @param \AppBundle\Entity\Departement $departement
*/
public function removeDepartement(\AppBundle\Entity\Departement $departement)
{
$this->departements->removeElement($departement);
}
/**
* @return \Doctrine\Common\Collections\Collection
*/
public function getDepartements()
{
return $this->departements;
}
}
<kbd>src/AppBundle/Entity/Departement.php</kbd>
class Departement {
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Utilisateur", inversedBy="departements")
*/
private $commercial;
/**
* @param \AppBundle\Entity\Utilisateur $commercial
* @return Departement
*/
public function setCommercial(\AppBundle\Entity\Utilisateur $commercial=null) {
$this->commercial=$commercial;
return $this;
}
/**
* @return \AppBundle\Entity\Utilisateur
*/
public function getCommercial() {
return $this->commercial;
}
}
<kbd>src/AppBundle/Form/Utilisateur/Edit3dhType.php</kbd>
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('departements', EntityType::class, array(
'class'=>Departement::class,
'expanded'=>true,
'multiple'=>true
));
}
<kbd>src/AppBundle/Controller/UtilisateurController.php</kbd>
/**
* @Route("/dashboard/utilisateurs/edit-{id}", name="security_edit_user")
* @Method({"GET", "POST"})
*
* @param Request $request
* @param Utilisateur $utilisateur
* @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
*/
public function editAction(Request $request, Utilisateur $utilisateur) {
$logo=$utilisateur->getLogo();
if($utilisateur->getLogo() !== null) {
$utilisateur->setLogo(new File($this->getParameter('dir_picto').$logo));
}
$form=$this->createForm(Edit3dhType::class, $utilisateur, array(
'action'=>$this->generateUrl('security_edit_user', array('id'=>$utilisateur->getId())),
'method'=>'POST',
));
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
if($utilisateur->getLogo() !== null) {
$utilisateur->setLogo($this->container->get('service.upload')->uploadPicto($utilisateur->getLogo()));
} else {
$utilisateur->setLogo($logo);
}
$em=$this->getDoctrine()->getManager();
$em->flush();
}
return $this->render('security/edit.html.twig', array(
'user'=>$this->getUser(),
'utilisateur'=>$utilisateur,
'form'=>$form->createView(),
));
}