IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

[Symfony 2.8.0]Problème relation entre entité


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [Symfony 2.8.0]Problème relation entre entité
    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;
    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;
    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
    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 : 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;
    }
    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

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2013
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2013
    Messages : 71
    Par défaut
    Bonjour,

    Je n'ai pas très bien compris votre problème mais lorsque j'ai vu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $placeFille = $voiture->getPlace();
    $placeMere  = $voitureMere->getPlace()
    j'ai de suite pensé à un problème que j'avais rencontré et que j'avais résolu en faisant un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $placeFille = $voiture->getPlace();
    $placeMere  = $voitureMere->getPlace()
    $placeFille->clear();
    $placeMere->clear();
    Peut-être jeter un oeil sur les fonctions clone() et detach() éaglement.

Discussions similaires

  1. [2.x] les relation entre entités avec Doctrine (Symfony)
    Par mandzokich dans le forum Symfony
    Réponses: 13
    Dernier message: 19/08/2014, 01h39
  2. Réponses: 0
    Dernier message: 19/07/2013, 19h31
  3. Relation entre entités dans différents bundles
    Par benderpremier dans le forum Doctrine2
    Réponses: 6
    Dernier message: 24/06/2011, 04h06
  4. [phpMyAdmin] Problème relation entre tables
    Par momo0409 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 14/09/2007, 15h04
  5. Problème relation entre champs
    Par Zinemon dans le forum IHM
    Réponses: 1
    Dernier message: 14/06/2007, 14h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo