Bonjour à tous,
J'ai une entité place qui peut contenir une voiture :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 /** * Voiture * * @ORM\Table() * @ORM\HasLifecycleCallbacks() * @ORM\Entity() */ class Voiture { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\OneToOne(targetEntity="KG\ParkingManagementBundle\Entity\Place", inversedBy="voiture", cascade={"persist", "remove"}, orphanRemoval=true) * @ORM\JoinColumn(nullable=false) * @Assert\Valid() */ private $place;Quand j’exécute la méthode ci-dessous, voitureMere est supprimée, placeMere aussi et voiture et placeFille n'existe pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 /** * Place * * @ORM\Table() * @ORM\Entity(repositoryClass="KG\ParkingManagementBundle\Entity\PlaceRepository") */ class Place { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\OneToOne(targetEntity="KG\ParkingManagementBundle\Entity\Voiture", mappedBy="place", cascade={"remove"}, orphanRemoval=true) * @Assert\Valid() */ private $voiture;
Dans mon setPlace() j'ai le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 /** * @Security("has_role('ROLE_USER')") * @ParamConverter("voitureMere", options={"mapping": {"voiture_id" : "id"}}) */ public function echangerAction(Voiture $voitureMere, Request $request) { $voiture = new Voiture(); $form = $this->createForm(new EchangerType($voitureMere), $voiture); if ($form->handleRequest($request)->isValid()){ $placeFille = $voiture->getPlace(); $placeMere = $voitureMere->getPlace() $voiture->setPlace($placeMere); $voitureMere->setPlace($placeFille); $em = $this->getDoctrine()->getManager(); $em->persist($voiture); $em->persist($voitureMere); $em->flush(); return $this->redirect($this->generateUrl('kg_parking_management_view_parking', array('parking_id' => $voiture->getPlace()->getParking()->getId()))); } return $this->render('KGParkingManagementBundle:Voiture:echanger.html.twig', array('form' => $form->createView(), 'voitureMere' => $voitureMere )); }
Auriez vous une idée du problème ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 /** * Set place * * @param \KG\ParkingManagementBundle\Entity\Place $place * @return Voiture */ public function setPlace(\KG\ParkingManagementBundle\Entity\Place $place = null) { $this->place = $place; if($place){ $place->setVoiture($this); } return $this; }
Si j'enlève les
orphanRemoval=true
J'ai un message d'erreur pour me dire que je ne respecte pas la contrainte d'intégrité qui dit que le champs place id contenu dans ma voiture ne peut pas apparaitre dans deux voitures...
Si j'affecte la nouvelle voiture à la nouvelle place et que je ne touche pas à l'ancienne, tout est bien sauvegardé, mais ça ne fait pas ce que je veux
Merci pour votre aide
Partager