J'ai une requête SELECT que je voudrais 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();
5 Réponses :
the grammaire BNF pour le Doctrine Query Language ne semble pas contenir quoi que ce soit lié à un cas code> code> construction. P>
J'ai juste eu le même problème et, à première vue, semble avoir une solution de contournement. Je crois que vous pouvez «tromper» la doctrine Sélectionnez un analyseur à le traiter comme une sous-requête en l'enveloppant entre parenthèses.
Donnez ceci un essai: P>
$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();
Les déclarations de cas semblent avoir été ajoutées à la doctrine à un moment donné: https://github.com/doctrine/ormi-documentation/commit/189C729F15D2FAFECF92662CAFE9553C2EC3DCCD7 # diff-0 p>
J'ai eu le même problème ici. Mon projet est très vieux et essayé de le réparer rapidement. Donc, je change simplement un peu le code de la doctrine afin que je puisse utiliser "cas quand". Ceci est mon code pour la doctrine 1.1.3.
Doctrine / Query.php, modifier des lignes de 658 à 674: P>
if (count($terms) > 1 || $pos !== false) { if($terms[0]=='case') { $terms=explode(" as ", $reference); $expression = array_shift($terms); $alias = array_pop($terms); if ( ! $alias) { $alias = substr($expression, 0, $pos); } $componentAlias = $this->getExpressionOwner($expression); $tableAlias = $this->getTableAlias($componentAlias); $expression=str_replace($componentAlias, $tableAlias, $expression); $index=0; $sqlAlias = $tableAlias . '__' . $alias; } else { $expression = array_shift($terms); $alias = array_pop($terms); if ( ! $alias) { $alias = substr($expression, 0, $pos); } $componentAlias = $this->getExpressionOwner($expression); $expression = $this->parseClause($expression); $tableAlias = $this->getTableAlias($componentAlias); $index = count($this->_aggregateAliasMap); $sqlAlias = $this->_conn->quoteIdentifier($tableAlias . '__' . $index); } $this->_sqlParts['select'][] = $expression . ' AS ' . $sqlAlias;
S'il vous plaît ajouter une balise PHP à cette question
fait ... dans au moins 15 caractères: - /