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 :

Sélectionner des colonnes [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 63
    Points : 63
    Points
    63
    Par défaut Sélectionner des colonnes
    Bonjour, dans un soucis de performance, mais surtout pour apprendre doctrine j'aimerai retourner seulement les colonnes que j'affiche. Seulement je ne trouve pas le morceau de code dans la documentation :/ .

    Actuellement j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class PostRepository extends EntityRepository
    {
        public function getLastPosts() {
     
        $q = $this->createQueryBuilder('p')
                      ->select('p.name')
                      ->leftJoin('p.category', 'c')
                      ->addSelect('c')
                      ->orderBy('p.date', 'DESC');
     
        return $q->getQuery()->getResult();
      }
    }
    ce qui me retourne :
    Semantical Error line 0, col -1 near 'SELECT p.name,': Error: Cannot select entity through identification variables without choosing at least one root entity alias.
    Si je fais : ->select('p') ça retournera bien que les colonnes de Post, mais si je veux juste p.name comment faire ?

    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Points : 677
    Points
    677
    Par défaut
    Salut,

    Je pense que l'erreur est dans leftjoin ou presque. Tu sélectionnes que la colonne name et tu demande de faire une jointure sur une colonne que tu ne sélectionne pas.

  3. #3
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Points : 677
    Points
    677
    Par défaut
    Je viens de faire le test avec un projet, même en sélectionnant la jointure, l'erreur est pire.

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 63
    Points : 63
    Points
    63
    Par défaut
    Le p.name est juste un exemple pour voir si ça marche. Après je rajouterai les champs voulues

  5. #5
    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
    Bonjour,

    Il faut utiliser la syntaxe "partial":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $q = $this->createQueryBuilder('p')
                      ->select('partial p.{name}')
                      ->leftJoin('p.category', 'c')
                      ->addSelect('c')
                      ->orderBy('p.date', 'DESC');
    Lis bien la doc, car cela peut poser des problèmes,car il est plutôt conseillé de récupérer les entités entières .
    http://docs.doctrine-project.org/en/...l-objects.html

    Sinon le DQL permet également de récupérer de simple tableaux php et non des entités, je pense que ceci devrait fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $dql="SELECT p.name, c.libelle FROM MyEntity c LEFT JOIN p.category c";
    $result=$em->createQuery($dql)->getArrayResult();
    print_r($result);
    http://docs.doctrine-project.org/en/...rray-hydration

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 63
    Points : 63
    Points
    63
    Par défaut
    Ok merci

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 22/06/2014, 01h01
  2. Macro qui sélectionne des colonnes spécifiques
    Par nyto35 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/04/2013, 15h41
  3. Sélectionner des colonnes qui dépendent d'une requête
    Par socomajor dans le forum Langage SQL
    Réponses: 6
    Dernier message: 14/10/2011, 13h05
  4. Sélectionner des colonnes par leur numéro
    Par GnarlyYoyo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/11/2007, 22h27
  5. sélectionner les noms des colonnes
    Par [Hugo] dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 16/05/2007, 14h35

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