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 :

[Symfony2] Relation entre Entités [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 351
    Points : 342
    Points
    342
    Par défaut [Symfony2] Relation entre Entités
    Bonjour,

    Énoncé du problème :

    J'ai une entité : "Operation" (opération immobilières), en relation ManyToMany avec une entité User (FosUserBundle). Donc concrètement j'ai une liste d'utilisateur qui peuvent accéder à une Operation.
    A l'intérieur de chaque opération j'ai des catégories (Entité Categorie), et pour chaque catégories j'ai une entité Mailing (OneToOne) qui à pour attribut le texte du mailing pour la catégorie, ainsi que la liste des utilisateurs qui recevront le mailing de la catégorie.

    L'utilisateur à la possibilité côté backoffice de désigner via un formulaire quel utilisateur peut accéder une opération => et à ses catégories, et via un autre formulaire quel utilisateur recevra le mailing de tel ou tel catégorie. Tout cela fonctionne parfaitement.

    Ma question : Comment faire pour que la liste des utilisateurs qui apparaissent dans le menu déroulant du formulaire du mailing corresponde aux utilisateurs de l'opération et non à l'ensemble des utilisateurs ? Ou, autre solution : comment faire pour que les utilisateurs sélectionnés par défaut dans le menu du formulaire de mailing correspondent aux utilisateur de l'opération ?

    Pour tenter la deuxième solution, j'ai déjà essayé d'initialiser la collection des utilisateurs du mailing avec la collection des utilisateur de l'opération, mais ça ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public function __construct()
      {    
          $this->users = new \Doctrine\Common\Collections\ArrayCollection();
          $this->users = $this->categorie->getOperation()->getUsers(); 
      }
    Auriez-vous quelques pistes, je pensais peut-être avec les évènements doctrine ?

    Merci de votre aide.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 125
    Points : 108
    Points
    108
    Par défaut
    Salut,
    Je n'ai pas bien compris ta description.

    Tu peux faire un findByCategorie_id pour que tes utilisateurs correspondent à ceux d'une seule catégorie.

    Sachant que en faite tu ne devras pas mettre id à la fin.

    N'oublis pas de mettre résolut.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 351
    Points : 342
    Points
    342
    Par défaut
    J'ai trouvé la solution, en fait il faut utiliser les évènements de formulaire : http://symfony.com/doc/current/cookb...d-on-user-data , puis construire le formulaire en utilisant la collection des utilisateurs de l'opération que l'on récupère dans le formulaire grâce à l'évènement, de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $users = $event->getData()->getCategorie()->getOperation()->getUsers();
    Voila ce que ça donne au niveau de ma méthode buildForm :
    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
    public function buildForm(FormBuilderInterface $builder, array $options)
      {
        $builder->add('texte', 'textarea', array('attr' => array('class' => 'ckeditor')));  
     
        $factory = $builder->getFormFactory(); 
     
        $builder->addEventListener(
            FormEvents::PRE_SET_DATA,
            function(FormEvent $event) use ($factory){               
                $form = $event->getForm();               
                $formOptions = array(
                    'class'    => 'Asset\UserBundle\Entity\User',
                    'property' => 'username',
                    'multiple' => true,
                    'query_builder' => function(EntityRepository $er) use ($event) {
     
                        $users = $event->getData()->getCategorie()->getOperation()->getUsers();
     
                        $qb = $er->createQueryBuilder('u');                             
     
                        foreach ($users as $user) {                      
                          $idsUtilisateurs[] = $user->getId();
                        }   
     
                        $qb->add('where', $qb->expr()->in('u.id', $idsUtilisateurs));
     
                        return $qb;
                    },
                );           
                $form->add($factory->createNamed('Users', 'entity', null, $formOptions));           
             }
        );       
      }

+ 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