ここでも同じ問題がありました。私のプロジェクトは非常に古く、すぐに修正しようとしました。そこで、Doctrine のコードを少し変更して、「case when」を使用できるようにします。これは Doctrine 1.1.3 の私のコードです。
Doctrine/Query.php、行を 658 から 674 に変更:
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;
大きな変化ではありませんが、私を助けてくれました...