我如何按yii中的STAT关系排序?

时间:2014-10-09 17:15:52

标签: php yii entity-relationship

我的用户模型中有以下关系:

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的排序顺序是什么?

1 个答案:

答案 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

中的排序元素