CActiveRecord + CDbExpression

Хочется с помощью CActiveRecord вытащить год из поля даты в таблице. Пытался сделать:




$years = PortalNew::model()->published()->findAll(array(

    'select'=>new CDbExpression('extract(year from dt) as "val"'),

    'distinct'=>bool,

    'order'=>'val',

));



Код из представления:




<?php foreach($years as $year): ?>

<span><?php echo $year->val; ?></span>

<?php endforeach; ?>



Так на работает :( Подскажите как можно реализовать подобный запрос.

А через CDbCriteria пробовали ?




$criteria = new CDbCriteria();

$criteria->select = new CDbExpression('extract(year from dt) as "val"');

$criteria->distinct = bool;

$criteria->order = 'val';


$years = PortalNew::model()->published()->findAll($criteria);



По сути это одно и то же. Пришлось отказаться от подобной затеи и воспользоваться менее красивым способом:




$connection = Yii::app()->db;

$command = $connection->createCommand('select distinct extract(year from dt) as "year" from '.PortalNew::model()->tableName().' where ispublished = '.PortalNew::PUBLISHED.' order by "year"');

$dataReader = $command->query();

$years = $dataReader->readAll();



Если кто-то знает как реализовать подобное с помощью CActiveRecord, буду рад узнать как :)

А разве просто


'select'=>'extract(year from dt) as val'

не сработает?

CDbCommandBuilder никаких манипуляций с этой частью запроса не делает, чтобы она не работала:




$select=is_array($criteria->select) ? implode(', ',$criteria->select) : $criteria->select;



Возможно работает, но тогда возникает вопрос, как извлечь столбец с алиасом val? Когда пытаешься к нему обратиться как здесь:




<?php foreach($years as $year): ?>

<span><?php echo $year->val; ?></span>

<?php endforeach; ?>



Возникает ошибка, т.к. val ищется в модели.

Создать в модели поле "public $val";

Жесть… Спасибо большое :)