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 :
Elle marche et la page qui l'utilise affiche les bons résultats.
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() ; }
Maintenant, si je mets en majuscules les mots clés de la requête, ce que je fais souvent pour la lisibilité du code :
... et la page plante. L'exception qui est levée par Doctrine contient le message suivant :
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";
Conclusion : selon la casse utilisée dans la requête, Doctrine effectue des traitements différents :Couldn't find class customer_order_history
- 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é ?
Partager