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

ORM PHP Discussion :

Effets de bord de la casse dans une requête ?


Sujet :

ORM PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut Effets de bord de la casse dans une requête ?
    Bonjour à tous,

    voici le dernier mystère symfonique auquel je me suis trouvé confronté : soit dans le modèle la méthode de la classe CustomerOrderTable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        public function getCartForClient($clientId, Doctrine_Query $q = null) {
    	if (!$q) {
    	    $q = $this->createQuery();
    	}
     
    	$rootAlias = $q->getRootAlias();
    	$sq = "select max(rank) from customer_order_history where customer_order_id = $rootAlias.id group by $rootAlias.id";
    	return $q->andWhere("$rootAlias.sf_guard_user_id = ?", $clientId)
    		->andWhere("$rootAlias.History.rank = ($sq)")
    		->andWhere("$rootAlias.History.order_status_id = ?", OrderStatus::ID_CART)
    		->fetchOne()
    	;
        }
    Elle marche et la page qui l'utilise affiche les bons résultats.

    Maintenant, si je mets en majuscules les mots clés de la requête, ce que je fais souvent pour la lisibilité du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	$sq = "SELECT MAX(rank) FROM customer_order_history WHERE customer_order_id = $rootAlias.id GROUP BY $rootAlias.id";
    ... et la page plante. L'exception qui est levée par Doctrine contient le message suivant :
    Couldn't find class customer_order_history
    Conclusion : selon la casse utilisée dans la requête, Doctrine effectue des traitements différents :
    • tout en minuscules -> il l'interprète comme du sql pur,
    • sinon -> il essaye d'en faire du DQL.

    Quelle est l'explication ? Cet effet de bord (ou ce bug) est-il connu ou documenté ?

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Jamais testé ni cherché par là, mais la proposition est intéressante.

    Il faudrait descendre dans les méandres de doctrine.

    Je n'ai jamais rien lu qui valide ou invalide ta proposition, mais je vais faire des testes, un jours...

Discussions similaires

  1. [LibreOffice][Texte] Non respect de la casse dans une macro
    Par Nerva dans le forum OpenOffice & LibreOffice
    Réponses: 4
    Dernier message: 23/05/2013, 20h48
  2. Problème de casse dans une recherche
    Par lipao17 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/07/2005, 10h55
  3. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  4. [SQL] Renommer un champ dans une requête
    Par martonpylon12 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 15/11/2003, 01h59
  5. petit probleme dans une requte POSTGRE SQL
    Par ghis le fou dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2003, 13h51

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