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

Doctrine2 PHP Discussion :

Problème de tri dans une requête


Sujet :

Doctrine2 PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 27
    Par défaut Problème de tri dans une requête
    Bonjour,

    je viens de me mettre à Symfony 2 et à Doctrine. J'ai à peu près compris l'ensemble des éléments, excepté le query builder de Doctrine.

    Je voudrais en fait exécuter une requête pour sélectionner un certain nombre de lieux situés à moins de X kilomètres d'un certain point.

    Pour cela, je fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $d->select('p.id, p.name, GEO(p.latitude = '.$latitude.', p.longitude = '.$longitude.') AS distance');
                $d->orderBy('distance', 'ASC');
     
                $d->having('distance <= 5);
    GEO étant une fonction DQL que j'ai créée.

    Lors de l'exécution de cette requête, j'obtiens l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Notice: Undefined index: distance in C:\wamp\www\site\vendor\doctrine\lib\Doctrine\ORM\Query\SqlWalker.php line 1929
    Si je commente la ligne avec le having, cela fonctionne.

    Comment y remédier ?

    Merci à vous

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    tu peux pas trier avec un alias, par contre utilise les paramètres parce que la c'est pas top, pas la peine d'utiliser Symfony si c'est pour faire ça, la requête est bien de Repository ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 27
    Par défaut
    Merci pour ta réponse.

    Oui c'est du repository.

    J'ai voulu utiliser le builder au départ, mais je galère trop avec cette requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $query = $this->createQueryBuilder('p')
            ->select('p.id, p.name, GEO(p.latitude = :latitude, p.longitude = :longitude) AS distance')
            ->having('p.distance > :distance')
            ->setParameter('distance', '5')
            ->orderBy('p.id', 'ASC')
            ->getQuery();
    Là j'obtiens une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Semantical Error] line 0, col 230 near 'distance > :distance': Error: Class site\PlaceBundle\Entity\Place has no field or association named distance
    La fonction DQL est inspirée d'ici :
    http://www.lexik.fr/blog/symfony/doc...doctrine2-1624

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    fait juste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p.id, p.name, (GEO(p.latitude = :latitude, p.longitude = :longitude) <= :distance) AS distance

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 27
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $query = $this->createQueryBuilder('p')
            ->select('p.id, p.name, (GEO(p.latitude = :latitude, p.longitude = :longitude) <= :distance) AS distance')
            ->setParameter('latitude',$criteria['latitude'])
            ->setParameter('longitude', $criteria['longitude'])
            ->setParameter('distance', '5')
            ->orderBy('p.id', 'ASC')
            ->getQuery();
    J'obtiens :

    Error: Expected Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got '<'

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 27
    Par défaut
    En fait, je me demande si ce n'est pas dû au bundle KNP Paginator, car si je retourne la query sans passer par le paginator, aucune erreur n'est générée.

Discussions similaires

  1. Problème de tri dans une requête SQL
    Par Skpflz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/02/2012, 23h06
  2. Problème de décimales dans une requête
    Par pellec dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 21/07/2006, 08h15
  3. [10g] Problème de privilège dans une requête
    Par hotkebab99 dans le forum Oracle
    Réponses: 6
    Dernier message: 01/03/2006, 12h00
  4. Problème de perfomances dans une requête
    Par claralavraie dans le forum Langage SQL
    Réponses: 1
    Dernier message: 05/01/2006, 14h25
  5. Problème de débutant dans une requête
    Par decour dans le forum Access
    Réponses: 7
    Dernier message: 14/10/2005, 14h17

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