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 :

Champ d'entité qui effectue une requête pour chaque objet [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre habitué
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 141
    Points : 157
    Points
    157
    Par défaut Champ d'entité qui effectue une requête pour chaque objet
    J'ai un petit souci avec un formulaire. J'ajoutes des personnes à une formation via un entity field personne dans mon formulaire créé ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ->add('personne', 'entity', array(
                        'class' => 'Projet\FrontBundle\Entity\Personne',
                        'multiple' => false,
                        'required' => true,
                        'error_bubbling' => true,
                        'query_builder' => function(PersonneRepository $repo)use($id) {  
    //echo 'test';
                            return $repo->createQueryBuilder('p') 
                                    ->where('p.nom IS NOT NULL ')
                                    ->andWhere('p.prenom IS NOT NULL')
                                    ->andWhere('p.entreprise = :id')
                                    ->orderBy('p.nom')
                                    ->setParameter('id', $id);
                        }))
    Chargée en dehors de cet entity field, la fonction ne me donne bien qu'une requête pour charger la liste des personnes désirées. Mais ajoutée ainsi à l'option query_builder, j'obtiens une requête par personne...
    Sans l'option query_builder, je n'ai bien qu'une requête aussi.
    J'avoue ne pas trop voir ou pourrait se situer ce souci.
    Un simple echo me montre bien que la Closure n'est effectuée qu'une fois.

    Merci d'avance pour votre aide.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Ton formulaire est compris dans un type collection?

    http://www.developpez.net/forums/d11...es-identiques/

    tu peux passer directement le tableau des entité en utilisant l'option "choice".
    Tu peux même passer l'entityManager dans le constructeur de ton FormType et enregistrer celui-ci comme service avec un tag "form"

  3. #3
    Membre habitué
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 141
    Points : 157
    Points
    157
    Par défaut
    Merci beaucoup pour ta réponse.
    Désolé du retard de la mienne, mais j'ai dû creuser pas mal pour savoir d'où cela provenait...
    Je ne sais plus si au final une partie de mon problème venait de cela. Mais il était en plus lié à un souci beaucoup plus grave et peut-être moins connu (du moins pour moi).
    https://groups.google.com/forum/?fro...er/fkIaKxifDqc
    Une entité relative en One to One était en fait chargée pour chaque élément personne demandée en requête. Je ne m'étais jamais aperçu de ce souci demandant la plupart du temps un retour avec getArrayResult(), ce qui n'était pas possible pour la création des choices d'un entity field.

    Du coup, j'ai résolu mon problème avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $query = $queryBuilder->getQuery();        
            $query->setHint($query::HINT_FORCE_PARTIAL_LOAD, true);
     
            return $query->getResult();
    En espérant que ça puisse servir à quelqu'un. Cela peut vite devenir une catastrophe suivant les requêtes effectuées.

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

Discussions similaires

  1. Script qui effectue une commande sur chaque dossier de son listing
    Par nc13160 dans le forum Windows Serveur
    Réponses: 0
    Dernier message: 24/07/2012, 16h21
  2. Une requête pour chaque ligne de la table
    Par Nasky dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/05/2012, 11h16
  3. Langage pour effectuer une requête SQL.
    Par slake13 dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 19/11/2008, 13h22
  4. Problème pour effectuer une Requête
    Par mimst dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/05/2008, 21h41

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