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 :

FOSUserBundle et relations entre entités [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de magicbisous-nours
    Inscrit en
    Octobre 2005
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 277
    Par défaut FOSUserBundle et relations entre entités
    Bonjour,
    J'ai surchargé le formulaire d'inscription du FOSUB pour ajouter des champs dont certains issus de relation... Après avoir galéré avec les relations de type OneToOne j'ai réussi, grâce à votre aide, à les faire s'enregistrer dans la base de données.

    Aujourd'hui je reviens vers vous pour un problème lors de la persistance de relations bidirectionnelles OneToMany et ManyToOne.

    Voici ma relation :
    Logement :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    /**
         * @ORM\OneToMany(targetEntity="projet\BackOfficeBundle\Entity\Photo", mappedBy="logement", cascade={"persist", "remove"})
         */
        private $photos;
     
        public function __construct() {
            $this->photos = new \Doctrine\Common\Collections\ArrayCollection();
        }
     
        /**
         * Get photos
         *
         * @return Doctrine\Common\Collections\Collection 
         */
        public function getPhotos()
        {
            return $this->photos;
        }
     
        /**
         * Set photos
         *
         * @param Doctrine\Common\Collections\Collection 
         */
        public function setPhotos($photos)
        {
            $this->photos = $photos;
        }
     
        /**
         * Add photos
         *
         * @param projet\BackOfficeBundle\Entity\Photo $photos
         */
        public function addPhoto(\projet\BackOfficeBundle\Entity\Photo $photos)
        {
            $this->photos[] = $photos;
        }
    Photo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /**
         * @ORM\ManyToOne(targetEntity="projet\BackOfficeBundle\Entity\Logement", inversedBy="photos")
         * @ORM\JoinColumn(name="logement", referencedColumnName="log_id")
         */
        private $logement;
    Quand l'utilisateur s'enregistre et ajoute des photos pour son logement, les lignes correspondantes s'ajoutent bien en base de données mais il n'y a pas de relation (le champ logement dans la table photos est à null).
    Du coup pas moyen de récupérer la liste des photos d'un logement en faisant $logement->getPhotos().

    Est-ce normal ?

    Comment puis-je faire pour avoir ce genre de relation persistée ?

    Merci d'avance

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Par défaut
    je connais rien a SF, mais du coup \Entity\Photo permet d'avoir, Entity qui déclenche surement l'id de la personne, donc voir si avec getPhotos() tu n'a pas besoin d’étendre \Entity en premier lieux

  3. #3
    Membre éclairé Avatar de magicbisous-nours
    Inscrit en
    Octobre 2005
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 277
    Par défaut
    En fait Entity est le dossier contenant les "Entités" (mot Symfony2 qui désigne les classes PHP décrivant les tables de la BDD pour l'ORM). Ce n'est pas une classe et je ne peux donc pas l'étendre....

  4. #4
    Membre éprouvé
    Homme Profil pro
    Chef d'entreprise
    Inscrit en
    Mai 2011
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef d'entreprise
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2011
    Messages : 122
    Par défaut
    Bonjour,

    Quand tu ajoutes tes photos, il faut les lier au client si tu veux que $logement->getPhotos() retourne quelque chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    /**
         * Add photos
         *
         * @param projet\BackOfficeBundle\Entity\Photo $photos
         */
        public function addPhoto(\projet\BackOfficeBundle\Entity\Photo $photos)
        {
            $this->photos[] = $photos;
            $photos->setLogement($this);
        }

  5. #5
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut
    Bonjour,

    Je pense que la facon d'enregistrer est mal pensée d'après ce que je comprends.

    l'utilisateur est sur la page de création du logement, et il peut ajouter des photos avant de sauvegarder.

    Ce que je ferait donc,
    insérer les photos dans la table avec logement = null
    récupérer l'id au fur et a mesure
    lors de la validation, faire un setLogement sur toutes ces photos.

    Si tu veux a tout prix une contrainte not null sur logement, alors il faut crééer une table photo temp, et lors de l'enregistrement d'un logement aller chercher tous les ID dans cette table, récupérer les données associées et recreer les lignes dans la table photo.

    Bon courage.

  6. #6
    Membre éclairé Avatar de magicbisous-nours
    Inscrit en
    Octobre 2005
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 277
    Par défaut
    @Francesco34 : J'ai essayé ta méthode mais ça ne fonctionne pas mieux en fait...

    @pmithrandir : En fait ce formulaire est sur le formulaire d'inscription (Un utilisateur s'inscrit en renseignant des informations sur lui et son logement) et l'enregistrement en base de données c'est le FOSUserBundle qui fait ça...
    Du coup si j'ai bien compris tout ce que tu m'as dit (rien n'est moins sûr) pour avoir absolument autre chose que null dans la colonne logement de ma table Photos je dois surcharger le FormHandler du FOSUB afin de persister mes entités comme je le désire ?

    Merci d'avance

  7. #7
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut
    Question :
    est ce que l'utilisateur envoie les photos(en ajax par exemple) avant d'appuyer sur l'enregistrement de login ou pas ?

    Si cen'est pas le cas, il faut effectivement que tu surcharge la sauvegarde de l'utilisateur pour définir une valeur a la place du null..

    Si c'est ca, je veux bien la solution aussi, parce que je galère sur le même genre de problème.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2.x] Relation entre entité
    Par lodizzz dans le forum Symfony
    Réponses: 1
    Dernier message: 12/01/2012, 11h06
  2. [2.x] relations entre entités ManyToOne ou ManyToMany
    Par ziemelitis dans le forum Symfony
    Réponses: 5
    Dernier message: 02/01/2012, 18h19
  3. relation entre entités dans microsoft crm
    Par bssouf21 dans le forum Microsoft Dynamics CRM
    Réponses: 3
    Dernier message: 06/12/2011, 18h44
  4. relation entre entités dans microsoft crm
    Par bssouf21 dans le forum Microsoft Dynamics CRM
    Réponses: 0
    Dernier message: 05/12/2011, 10h20
  5. Relation entre entités dans différents bundles
    Par benderpremier dans le forum Doctrine2
    Réponses: 6
    Dernier message: 24/06/2011, 04h06

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