Hi all.
I’m having a problem where AR appears to be stripping out my call to the date_format function.
It works fine when I use the following simple request
$criteria = new CDbCriteria ;
$criteria->select = 'article_id,
DATE_FORMAT(t.updated_at, "%d %M %Y") AS date,
DATE_FORMAT(t.updated_at, "%l:%i") AS time' ;
$selected = BlockArticles::model()->findAll( $criteria ) ;
generating the following
SELECT article_id,
DATE_FORMAT(t.updated_at, "%d %M %Y")
AS date,
DATE_FORMAT(t.updated_at, "%l:%i") AS
time FROM `BlockArticles` `t`
However, when I try an eager load, by adding with(‘article’), like so
$criteria = new CDbCriteria ;
$criteria->select = 'article_id,
DATE_FORMAT(t.updated_at, "' . Yii::app()->params['DBDateFormat'] . '") AS date,
DATE_FORMAT(t.updated_at, "%l:%i") AS time' ;
$selected = BlockArticles::model()->with('article')->findAll( $criteria ) ;
the generated sql becomes
SELECT `t`.`article_id` AS `t0_c3`, `t`.`updated_at` AS
`t0_c7`, "%d %M %Y") AS date, `t`.`updated_at` AS `t0_c7`, "%l:%i") AS
time, `t`.`id` AS `t0_c0`, `article`.`id` AS `t1_c0`, `article`.`author_id`
AS `t1_c1`, `article`.`member_id` AS `t1_c2`, `article`.`related_member_id`
AS `t1_c3`, `article`.`article_type_id` AS `t1_c4`,
`article`.`previous_linked_article_id` AS `t1_c5`,
`article`.`next_linked_article_id` AS `t1_c6`,
`article`.`parent_article_item_id` AS `t1_c7`,
`article`.`child_article_item_id` AS `t1_c8`, `article`.`dateLatestAdded`
AS `t1_c9`, `article`.`priority` AS `t1_c10`, `article`.`article_heading`
AS `t1_c11`, `article`.`article` AS `t1_c12`, `article`.`date` AS `t1_c13`,
`article`.`secondaryDate` AS `t1_c14`, `article`.`approved_for_display` AS
`t1_c15`, `article`.`approved_at` AS `t1_c16`, `article`.`approved_by` AS
`t1_c17`, `article`.`created_at` AS `t1_c18`, `article`.`created_by` AS
`t1_c19`, `article`.`updated_at` AS `t1_c20`, `article`.`updated_by` AS
`t1_c21`, `article`.`deleted_at` AS `t1_c22`, `article`.`deleted_by` AS
`t1_c23` FROM `BlockArticles` `t` LEFT OUTER JOIN `articles`
`article` ON (`t`.`article_id`=`article`.`id`)
where the date_format(t.updated_at has been stripped out and replaced by t
.updated_at
AS t0_c7
In case the relationship is important, this is defined in BlockArticles as
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'article' => array(self::BELONGS_TO, 'Articles', 'article_id'),
);
}
Can anyone see anything wrong with what I’m doing that could cause this, or is this a bug somewhere in the criteria processing?