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 :

Notice: Undefined offset: 0 - custom Query [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2012
    Messages : 24
    Points : 10
    Points
    10
    Par défaut Notice: Undefined offset: 0 - custom Query
    Bonjour,

    Je suis en train de dev' une vidéothèque en ligne. J'ai au total deux entités : Film et Genre.
    J'ai tenté de faire une méthode qui récupère la liste de mes genres avec le nombre de films associés à chacun.

    Pour se faire j'ai créé un repository (GenreRepository), dans lequel j'ai créé ma méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public function myFindAll()
    {
        $genres = $this->_em->createQueryBuilder('g')
                            // leftJoin because I need all the genre
                            ->leftJoin('g.films', 'f')
                            ->addSelect('COUNT(f)')
                            ->groupBy('g')
                            ->getQuery()
                            ->getArrayResult();
        // $genres contains all the genres and the associated movies
        return ($genres);
    }
    Voici l'erreur en question :
    "Notice: Undefined offset: 0 in C:\wamp\www\Videotheque\vendor\doctrine\lib\Doctrine\ORM\QueryBuilder.php line 240"

    Je précise que j'ai remplis manuellement ma bdd pour tester ma méthode.

    Enfin vous pouvez accèder au code de mes deux entités via mon portail github : projet videotheque

    Merci d'avance pour vos retours,

    Adrien

  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
    Bonjour,
    pourquoi
    $this->_em->createQueryBuilder('g')
    cela crée un queryBuilder mais ne renseigne pas sur quel entité tu veux faire ta requete

    la classe Repository fournit la méthode pour créer un queryBuilder déjà configuré en fonction de l'entité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->createQueryBuilder('g')

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2012
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    avant toute chose merci d'avoir pris le temps de me réponse.

    Ton explication m'a néanmoins perturbé dans le sens où, dans le cadre de mon apprentissage symfony2, j'ai lu que pour récupérer un QueryBuilder, on peut utiliser simplement l'EntityManager.
    En effet, il dispose d'une méthode createQueryBuilder() qui retourne une instance de QueryBuilder.
    L'EntityManager est accessible depuis un repository en utilisant l'attribut "_em" d'un repository, soit <?php $this->_em. Le code complet pour récupérer un QueryBuilder neuf depuis une méthode d'un repository est donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php $this->_em->createQueryBuilder() ?>
    Es tu d'accord avec cette explication ? ou peut être l'ai je mal comprise et donc mal appliqué à mon contexte.

    Adrien

  4. #4
    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
    Bien sur on peut créer un queryBuilder à partir d'un entity Manager, mais puisque le repository te propose le raccourci pour en créer un et le configurer en fonction de la classe managé par le repository, pourquoi ne pas l'utiliser?
    le code de EntityRepository::createQueryBuilder fait exactement ce que tu demandes:
    voir https://github.com/doctrine/doctrine...itory.php#LC78

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2012
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    En effet la méthode la méthode return mon code de départ.

    Est ce que tu sais pourquoi mon code de base générait la dite erreur ? L'alias en argument de la méthode createQueryBuilder est le raccourci que l'on donne à l'entité du repository.

  6. #6
    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
    Est ce que tu sais pourquoi mon code de base générait la dite erreur ? L'alias en argument de la méthode createQueryBuilder est le raccourci que l'on donne à l'entité du repository
    Citation:
    $this->_em->createQueryBuilder('g')
    cela crée un queryBuilder mais ne renseigne pas sur quel entité tu veux faire ta requete

    la classe Repository fournit la méthode pour créer un queryBuilder déjà configuré en fonction de l'entité
    Code :
    Sélectionner tout - Visualiser dans une fenêtre à part

    $this->createQueryBuilder('g')
    le code de Doctrine\ORM\EntityRepository
    public function createQueryBuilder($alias)
    {
    return $this->_em->createQueryBuilder()
    ->select($alias)
    ->from($this->_entityName, $alias);
    }

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2012
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    ok merci pour tes explications !

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

Discussions similaires

  1. [MySQL] Notice: Undefined offset
    Par gaetanc15 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 30/04/2009, 16h16
  2. [Tableaux] Notice: Undefined offset
    Par KOogar dans le forum Langage
    Réponses: 16
    Dernier message: 02/02/2008, 02h44
  3. [Système] Notice: Undefined offset
    Par noname_971 dans le forum Langage
    Réponses: 2
    Dernier message: 22/01/2008, 14h02
  4. [Tableaux] Notice: Undefined offset: 5 in
    Par fast462 dans le forum Langage
    Réponses: 3
    Dernier message: 30/05/2007, 10h08
  5. erreur: "Notice: Undefined offset:"
    Par Sh1v3r dans le forum Langage
    Réponses: 2
    Dernier message: 17/06/2006, 22h48

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