À l'aide d'un "cas lorsqu'" dans une Doctrine de l'instruction select
J'ai une requête select, j'aimerais effectuer avec la Doctrine:
$resultset = Doctrine_Query::create()
->select("t.code, t.description, case when t.id_outcome = 1 then 1 else 0 end as in_progress")
->from('LuOutcome t')
->orderBy('t.rank')
->fetchArray();
Et il barfs sur le "cas". La documentation ne mentionne pas qu'il est possible (ou pas).
Je me demandais si la Doctrine n'a pas la capacité de le faire. Si oui, c'est plutôt une omission majeure. Quelqu'un sait-il d'un travail autour?
s'il vous plaît ajouter une balise PHP à cette question
fait... au moins 15 caractères :-/
fait... au moins 15 caractères :-/
OriginalL'auteur dland | 2009-10-14
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème ici. Mon projet est très ancienne, et a essayé de corriger le problème rapidement. Donc, je viens de modifier un peu le code pour la Doctrine si je peux utiliser le "si". C'est mon code pour la Doctrine de la 1.1.3.
Doctrine/Query.php, modifier les lignes à partir de 658 à 674:
Ce n'est pas un grand changement, mais il m'a aidé...
OriginalL'auteur Edu
J'ai juste eu le même problème et, à première vue, semblent avoir une solution de contournement. Je crois que l'on peut "tromper" la Doctrine Sélectionnez analyseur en le traitant comme une sous-requête en l'enveloppant dans la parenthèse.
Donner à ceci un essai:
Il travaille également dans les clauses where.
OriginalL'auteur Mike B
La Grammaire BNF pour la Doctrine Query Language ne semble pas contenir tout ce qui est lié à un
CASE
construire.OriginalL'auteur Ionuț G. Stan
Cas déclarations ne semblent avoir été ajoutés à la doctrine à un certain point:
https://github.com/doctrine/orm-documentation/commit/189c729f15d2fafecf92662cad9553c2ec3dccd7#diff-0
OriginalL'auteur adavea
Comme mentionné par adavea, la Doctrine a ajouté le support pour CAS expressions. Vous pouvez faire quelque chose comme
Espère que cela peut aider quelqu'un, merci!
OriginalL'auteur Azhar Khattak
Je vous recommande de ne pas utiliser ce CAS, la syntaxe pour la résolution de ce problème. Il semble difficile.
Pourquoi ne voulez-vous pas
et ensuite une boucle sur $resultset et de créer ce champ (in_progress) manuellement en fonction de (id_outcome). Vous pouvez utiliser une simple petite minuscule méthode.
Avantages:
OriginalL'auteur Nikita Fedyashev