Fray
(Eol Fray)
September 7, 2010, 9:30am
1
Хочется с помощью 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; ?>
Так на работает Подскажите как можно реализовать подобный запрос.
raa
(Rudenkosasha)
September 7, 2010, 10:01pm
2
А через 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);
Fray
(Eol Fray)
September 8, 2010, 4:14am
3
По сути это одно и то же. Пришлось отказаться от подобной затеи и воспользоваться менее красивым способом:
$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, буду рад узнать как
andy_s
(Arekandrei)
September 8, 2010, 8:28am
4
А разве просто
'select'=>'extract(year from dt) as val'
не сработает?
CDbCommandBuilder никаких манипуляций с этой частью запроса не делает, чтобы она не работала:
$select=is_array($criteria->select) ? implode(', ',$criteria->select) : $criteria->select;
Fray
(Eol Fray)
September 8, 2010, 8:39am
5
Возможно работает, но тогда возникает вопрос, как извлечь столбец с алиасом val? Когда пытаешься к нему обратиться как здесь:
<?php foreach($years as $year): ?>
<span><?php echo $year->val; ?></span>
<?php endforeach; ?>
Возникает ошибка, т.к. val ищется в модели.
andy_s
(Arekandrei)
September 8, 2010, 8:46am
6
Fray:
Возможно работает, но тогда возникает вопрос, как извлечь столбец с алиасом val? Когда пытаешься к нему обратиться как здесь:
<?php foreach($years as $year): ?>
<span><?php echo $year->val; ?></span>
<?php endforeach; ?>
Возникает ошибка, т.к. val ищется в модели.
Создать в модели поле "public $val";