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 :

Équivalent de "pluck" pour Symfony


Sujet :

Symfony PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Par défaut Équivalent de "pluck" pour Symfony
    Salut a tous,

    Je suis actuellement un tuto, dans l'exemple la personne utilise Laravel comme framework (personne n'est parfait..)
    j'avance plutôt bien.. mais je bug sur quelque chose, il utilise pluck dans une requête, mais je ne connais pas l’équivalent pour Symfony

    voici la requête de son tuto :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        public function unreadCount (int $userId) {
            return $this->message->newQuery()
                ->where('to_id', $userId)
                ->groupBy('from_id')
                ->selectRaw('from_id, COUNT(id) as count')
                ->whereRaw('read_at IS NULL')
                ->get()
                ->pluck('count', 'from_id');
        }
    en résumé pluck, sert a choisir quoi mettre dans la clé du tableau et quoi mettre dans la valeur..

    merci à vous

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    un truc dans le genre ?
    l'intérête est la méthode = toKeyValueArray('id', 'name');
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $entityManager = $this->getEntityManager();
     
            $query = $entityManager->createQuery(
                'SELECT p
                FROM App\Entity\Product p
                WHERE p.price > :price
                ORDER BY p.price ASC'
            )->setParameter('price', $price);
     
            // returns an array of Product objects
            return $query->getResult()->toKeyValueArray('id', 'name');

  3. #3
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut
    Dans mes souvenirs, pluck sert à limiter les colonnes qu'on veut récupérer.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public function unreadCount (int $userId) {
            return $this->message->newQuery()
                ->select('from_id, COUNT(id) as count')            
                ->where('to_id', $userId)
                ->groupBy('from_id')
                ->where('read_at IS NULL')
                ->getResult();
        }
    En revanche, je ne connais pas ces trucs, selectRaw, WhereRaw...
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  4. #4
    Membre éclairé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Par défaut
    Citation Envoyé par Alexandre T Voir le message
    Dans mes souvenirs, pluck sert à limiter les colonnes qu'on veut récupérer.
    pas seulement je crois, car il indique ce qu'il doit mettre dans la clé et dans la valeur.

    voici la requête sous Laravel a convertir en doctrine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /**
         * Récupère le nombre de messages non lus pour chaque conversation
         * @param int $userId
         * @return Builder[]|\Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Query\Builder[]|\Illuminate\Support\Collection
         */
        public function unreadCount (int $userId) {
            return $this->message->newQuery()
                ->where('to_id', $userId)
                ->groupBy('from_id')
                ->selectRaw('from_id, COUNT(id) as count')
                ->whereRaw('read_at IS NULL')
                ->get()
                ->pluck('count', 'from_id');
        }
    en sortie il y a un tableau avec clé valeur, la clé c'est l'id membre et la valeur c'est le nombre de message non lu.

    J'ai essayé plusieurs choses dont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        public function unreadCount(int $userId)
        {
            return $this->createQueryBuilder('message')
                ->where('message.recipient', $userId)
                ->groupBy('message.author')
                ->select("message.author, count(message.id) as nb")
                ->andWhere("message.readAt is NULL")
                ->getQuery()->execute(null, Query::HYDRATE_ARRAY);
     
                //->getArrayResult();
                //->getResult();
        }
    Il me sort une erreur :
    Warning: get_class() expects parameter 1 to be object, int given
    Il attend un objet et je lui donne un entier. ok mais je souhaite un entier j'ai le droit^^
    pourquoi déjà il attend un objet ? :/ dans ma requête createQueryBuilder il y a une function qui demande obligatoirement un objet ?

  5. #5
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut
    Pluck semble intéressant en effet. Vu que Laravel est une surcouche de Symfony, si pluck est vraiment nécessaire, tu peux reprendre le code de la méthode pluck et la greffer à Doctrine. Mais selon moi, la meilleure solution (de la part des dev de Laravel), ce serait de proposer un Pull-Request de cette méthode sur le dépôt Doctrine pour que ce soit natif. C'est pour cela que je ne suis guère fan des frameworks qui se basent sur des frameworks. Il arrive un moment où tu éparpilles le code. En tout cas, pas de solutions natives, tu vas devoir boucler sur ton résultat et recréer un tableau avec les bonnes clés comme elles sont uniques. Tu peux peut-être trouver plus efficace, avec la méthode uasort avec en pour l'argument callback, une méthode de comparaison dédiée de ta classe, mais là je ne suis pas certain.


    Citation Envoyé par bndd24 Voir le message

    Il me sort une erreur :


    Il attend un objet et je lui donne un entier. ok mais je souhaite un entier j'ai le droit^^
    pourquoi déjà il attend un objet ? :/ dans ma requête createQueryBuilder il y a une function qui demande obligatoirement un objet ?

    J'ai répondu à ta question dans le sujet que tu as créé ici
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  6. #6
    Membre éclairé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Par défaut
    Citation Envoyé par Alexandre T Voir le message
    je ne suis guère fan des frameworks qui se basent sur des frameworks.

    J'ai répondu à ta question dans le sujet que tu as créé ici
    lol le tacle les deux pieds levés je te rejoins la dessus, c'est exactement ce que je pense de Laravel.

    Je ne connais pas très bien Laravel mais je pense qu'il est inutile d'apprendre deux framework. Autant en apprendre un seul mais très bien..

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/05/2008, 18h43
  2. [JS] Problème de quotes pour enregistrer un formulaire.
    Par polnioumane dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 24/10/2005, 17h04

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