[Symfony 2.8.0]Problème relation entre entité
Bonjour à tous,
J'ai une entité place qui peut contenir une voiture :
Code:
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; |
Code:
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; |
Quand j’exécute la méthode ci-dessous, voitureMere est supprimée, placeMere aussi et voiture et placeFille n'existe pas.
Code:
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
));
} |
Dans mon setPlace() j'ai le code :
Code:
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;
} |
Auriez vous une idée du problème ?
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