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 :

[DQL] Erreur 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
    Septembre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 20
    Par défaut [DQL] Erreur dans une requête
    Bonjour,
    J'ai un menu en base qui contient un id qui pointe sur un menu "père" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /**
     * @ORM\Entity(repositoryClass="AW\TestBundle\Entity\MenuRepository")
     */
    class Menu
    {
    ....
    	/**
    	 * @ORM\ManyToOne(targetEntity="Menu")
    	 */    
    	private $father;
    ...
    Dans mon MenuRepository j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public function fetchMenu() {
    	$request_data = 'SELECT menu
    		FROM AW\TestBundle\Entity\Menu menu
    		ORDER BY menu.father';
     
    	$qb = $this->_em
    		->createQuery($request_data)
    		->getResult(); 
    	return $qb;
    }
    A l'appel de ma page, j'ai toujours une erreur :
    [Semantical Error] line 0, col 77 near 'father': Error: Invalid PathExpression. Must be a StateFieldPathExpression.
    Quelqu'un aurai une idée?... je trouve peu d'info pour me dépatouiller de ca.

    Merci

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2011
    Messages : 50
    Par défaut
    D'après ce que tu nous montres, "father" représente une table.
    Du coup Doctrine est incapable de te trier la requête car sur quel champ de cette table faire le tri ??

    C'est pourquoi il faut à mon avis que tu rajoutes le champ de la table "father" pour lequel tu veux trier.

    D'ailleurs attention car "father" pointe sur l'entité "Menu"
    /**
    * @ORM\ManyToOne(targetEntity="Menu")
    */
    private $father;

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 20
    Par défaut
    Effectivement, "father" représente la table Menu.
    Ca me permet de créer le menu comme un arbre.

    J'ai essayé de mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $request_data = 'SELECT menu
    		FROM AW\TestBundle\Entity\Menu menu
    		ORDER BY menu.father.id';
    Et la j'ai encore une erreur :

    [SyntaxError] line 0, col 79: Error: Expected end of string, got '.'

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Par défaut
    Salut,

    Tu peux esquiver en mettant le ORDER BY directement dans la definition de la relation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /**
    * @ORM\ManyToOne(targetEntity="Father")
    * @ORM\OrderBy({"id" = "ASC"})
    */
    private $father;
    Mais sinon il existe deja un bundle pour gerer ton menu : https://github.com/knplabs/MenuBundle

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 20
    Par défaut
    Tu mets dans ton code or moi je veux que le target soit Menu.
    J'ai donc changé pour avoir : Ensuite tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @ORM\OrderBy({"id" = "ASC"})
    ca pourrai marcher si je voulais ne faire le tri que sur une colonne de "father", or là, c'est sur la clé primaire du father, donc au final j'ai pas le tri qui m’intéresse. De plus en mettant le OrderBy dans l'entité, je peux pas ajouter d'autre tri (à priori... mais vu que je débute sur Symfony2, je dis peut etre une betise).


    Je vais faire un exemple pour expliquer un peu plus mon problème :
    En BD j'ai :
    id;libelle;father_id;position
    1;Commercial;NULL;1
    2;Contact;1;1
    3;Action Co;1;2
    4;Devis;1;3
    5;Projet;NULL;2
    6;Tache;5;1
    7;Frais;1;4

    C'est censé me générer l'arbo suivante (en faisant un en sql un "order by father_id, position") :
    ->Commercial
    --->Contact
    --->Action Co
    --->Devis
    --->Frais
    ->Projet
    --->Tache

    Enfin, même en passant par le menuBundle, vu que j'aimerai que tout soit en BD, il faut bien que je crée ma structure... quitte ensuite à utiliser le bundle.

    D'autre proposition pour m'aider ?

    Merci encore

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Par défaut
    J'avais pas fait gaffe a ta relation. En fait le orderby dans la relation ca sert a trier les elements relies, pas toute ta requete. Mais comme tes elements n'ont qu'un seul pere, ca va rien trier du tout.

    Et si tu fais ORDER BY menu.father_id ? Ou sinon utilise le query builder c'est toujours plus sympa : http://www.doctrine-project.org/docs...y-builder.html

Discussions similaires

  1. Erreur dans une requète
    Par phoque.r dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/04/2007, 14h10
  2. #Erreur dans une requête avec une fonction personnalisée
    Par pguiheu dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 04/07/2006, 15h45
  3. [MySQL] Erreur dans une requête
    Par sagitarium dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 13/05/2006, 21h38
  4. [MySQL] Erreur dans une requête sql
    Par Goundy dans le forum PHP & Base de données
    Réponses: 37
    Dernier message: 30/01/2006, 16h08
  5. [VBA] Erreur dans une requête
    Par Damsou dans le forum Access
    Réponses: 31
    Dernier message: 21/06/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