Yii1.1でSelect句で指定するカラムにSQL関数やCASE文を使用する方法


Yii1.1を使用する案件を対応しているのですが、ナレッジがあまりないので、まとめてみました。

はじめに

YiiではCActiveRecordCDbCriteriaでSelect句を指定しますが、
COUNT関数やSUM関数を指定して取得する事は出来ましたが、
CASE文やDATE_FORMAT関数を指定した場合にエラーになったので、
対処方法をまとめてみました。

対応方法

CDbExpressionを使用して対応します。

$criteria = new CDbCriteria();
$criteria->select = [
   new CDbExpression("DATE_FORMAT('%Y-%m', t.create_date) AS create_date"),
   new CDbExpression("CASE create_id WHEN create_id = 9999999 THEN 管理者 ELSE ... END AS create_user_name"),
   ...
];
...
$result = Post::model()->find($criteria);

CDbExpressionは、公式サイトNOW関数を使うパターンが紹介されています。
今回の実装方法はこの応用になるのかなと思います。