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 :

Fusionner le résulat de deux (2) requêtes dans une liste déroulante sous Symfony


Sujet :

Symfony PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Fusionner le résulat de deux (2) requêtes dans une liste déroulante sous Symfony
    Bonsoir chèrs tous,

    Permettez que nous menions cette petite reflexion sur Symfony. Voilà, je souhaite combiner le résultat deux requêtes sous symfony et afficher le tout dans un select(liste déroulante). Naturellement, il nous faut passer en SQL par UNION, la clause.

    D'après mes recherches pour parvenir au même résulat sous Symfony, il faut utiliser createNativeQuery http://docs.doctrine-project.org/pro...ative-sql.html.

    Le fonds du problème est que Doctrine avec EntityType est senser retourner une instance de query_builder hors la méthode createNativeQuery retourne une instance de requête native. Du coup la requête plante.

    Je me demande s'il existerait un autre moyen !!! Need help please

  2. #2
    Nb
    Nb est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 148
    Points : 417
    Points
    417
    Par défaut
    Ca fait un moment que j'ai pas fait de symfo, mais doctrine ne supportant pas les UNION tu as peu de chance de réussir à utiliser un formtype étant là pour les représenter dans un formulaire; à moins que tes deux requetes tappent dans la meme table (ce qui serait louche )
    A mon avis le plus simple est de définir un formtype à toi : tu pourras ainsi gerer les données qu'il prend en entrée et celles en sortie (et toutes les transformations qu'il y a entre les deux).

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Merci Nb,

    En fait, justement ci, les deux requêtes vont taper dans la même table.
    Regarde .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    'SELECT a.id , a.ARTICLECODE, a.ARTICLENOM, a.ARTICLEPERISSABLE
    		Article a
    		LEFT JOIN TEMP_DEMANDE_ARTICLE t
    		ON a.ID = t.TEMPARTICLE_ID
    		WHERE t.TEMPARTICLE_ID IS NULL 
     
    				UNION
     
    		SELECT a.id , a.ARTICLECODE, a.ARTICLENOM, a.ARTICLEPERISSABLE
    		FROM Article a
    		WHERE A.ID = ?
    .
    La première requête avant le UNION récupère les articles qui ne se trouvent pas dans la table TEMP_DEMANDE_ARTICLE . En plus de ce resultat, j'ajoute un article donné par son Id d'où la seconde requête.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2003
    Messages : 307
    Points : 378
    Points
    378
    Par défaut
    Un or ne suffit pas dans ce cas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $qb = $this->createQueryBuilder('article');
    $qb->leftJoin('article.tmp_demande_article, 'temp', 'WITH');
    $qb->orWhere('temp.TEMPARTICLE_ID IS NULL');
    $qb->orWhere('article.id', ':id')
                    ->setParameter('id', $id);

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonjour mon chèr,

    En fait, pour ce que cas-ci oui, le Or peut effectivement faire l'affaire. Néanmoins en revenant à UNION, je me demande s'il n'ya pas moyen d'écrire cette requête avec UNION, en l'appelant par la suite dans le query_builder.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public function ArtsNotInTDem($id)
    	{
    		$qb = $this->_em->createQueryBuilder() ;
     
    				$sub = $this->createQueryBuilder('article')  
     
    							->leftJoin('article.tempdemandes', 'tda')
    							->addSelect('tda')
    							->orWhere($qb->expr()->isNull('tda.tempdemande'))
    							->orWhere($qb->expr()->eq('article.id', ':id'))							
    					                ->setParameter('id', $id);
     
                    return	$sub ;
    	}

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2003
    Messages : 307
    Points : 378
    Points
    378

  7. #7
    Nb
    Nb est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 148
    Points : 417
    Points
    417
    Par défaut
    Faire un UNION sur la meme table en selectionnant les memes champs est, au final (ptetre pas pour le SGBD), la meme chose qu'un OR.
    Et dès que tu ne selectionnes pas les même champs tu tombes sur la cause même qui fait que doctrine ne gere pas les UNION.

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Nb Voir le message
    Faire un UNION sur la meme table en selectionnant les memes champs est, au final (ptetre pas pour le SGBD), la meme chose qu'un OR.
    Et dès que tu ne selectionnes pas les même champs tu tombes sur la cause même qui fait que doctrine ne gere pas les UNION.
    La cause même qui fait que doctrien ne gere pas les UNION, c'est-à-dire...détailles un peu s'il te plait

  9. #9
    Nb
    Nb est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 148
    Points : 417
    Points
    417
    Par défaut
    Je suis pas dans la tete des dev doctine, c'est donc mon avis et il y a surement ici des gens qui pourront confirmer/infirmer mes propos.

    Le DQL est un "langage" qui te permet d'interroger facilement les objets déclarés/configurés dans l'ORM (ca te donnes une vue "objet" d'un SGBD qui ne l'est pas). Les objets que tu recuperes, Doctrine est chargé de les tracker pour que tu n'aie pas à te soucier de savoir quand/comment les mettre à jour, les creer ..etc.
    Mais pour ca il doit être capable de generer une ou des requetes SQL qui vont, par exemple, écrire dans la base les changements que ton code ont fait sur tel ou tel objet. Or si tu fais un UNION tu recuperes des jeux de données non homogenes : tu peux avoir, sur 2 lignes differentes, des champs venant de X tables dans la meme colonne sans que Doctrine ne soit capable de dire pour telle ligne , telle colonne c'est la colonne Y table X qu'il faudra mettre à jour si y'a besoins.
    Bref dans le cas d'un union Doctrine serait incapable de connaitre avec certitude la source de donnée d'une proprieté d'un objet.

    Dans ton cas les problemes liés à UNION ne sautent pas aux yeux car tu tappes dans la meme table pour recuperer les meme champs, ce qui ne devrait pas arriver car c'est un OR dans le where que tu devrais utiliser, mais ce n'est pas le cas général d'une requete avec des UNION.

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bien merci, à vous les gars, Nb et jfsenechal

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

Discussions similaires

  1. [AC-2007] Row Source : Deux (résultats) requêtes dans une comboxbox
    Par pgueret dans le forum Access
    Réponses: 7
    Dernier message: 17/02/2016, 15h02
  2. [AC-2010] Fusionner des tables de deux bases différentes dans une nouvelle base
    Par oreoolep dans le forum VBA Access
    Réponses: 3
    Dernier message: 07/10/2014, 09h11
  3. [WD-2007] Modifier le format du texte dans une liste déroulante sous Word 2007
    Par Fitch-Warrior dans le forum Word
    Réponses: 0
    Dernier message: 19/05/2014, 17h56
  4. Valeurs d'une requête dans une liste déroulante
    Par jasknky dans le forum Outils
    Réponses: 0
    Dernier message: 29/08/2008, 05h29
  5. Réponses: 2
    Dernier message: 21/10/2007, 00h56

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