我的用户模型中有以下关系:
return array(
'images' => array(self::HAS_MANY, 'Images', 'owner_id'),
'imagesCount' => array(self::STAT, 'Images', 'owner_id', 'condition' => 'approved = 1'),
'server' => array(self::BELONGS_TO, 'Servers', 'server_id'),
);
用户表通过owner_id与Images表相关。
图像模型的关系如下:
return array(
'imageVotes' => array(self::HAS_MANY, 'ImageVotes', 'image_id'),
'imageTags' => array(self::HAS_MANY, 'ImageTags', 'image_id'),
'owner' => array(self::BELONGS_TO, 'Users', 'owner_id'),
'server' => array(self::BELONGS_TO, 'Servers', 'server_id'),
);
我想根据他们上传的大多数图片计算出贡献者。
CDbCriteria或CActiveDataProvider的排序顺序是什么?
答案 0 :(得分:1)
您需要在CActiveDataProvider的排序对象
中使用虚拟属性您的数据提供商应该是这样的
$activeDataProvider = CActiveDataProvider($userModel, array(
'criteria' => $criteriaObject,
'sort' => array(
'defaultOrder'=>array('imgCount'),
'attributes'=>array('imgCount'=>
array('asc'=>'(SELECT COUNT(id) FROM images WHERE owner_id = t.id)', // t.id or modelName.id
'desc'=>'(SELECT COUNT(id) FROM images WHERE owner_id = t.id) DESC',
'label'=>'Images Count',
'default'=>'desc',
)),
)
));
}
请参阅CSort
文档,了解虚拟属性和关系属性如何用作DataProviders