Yii 按虚拟属性对ActiveDataprovider排序

Yii 按虚拟属性对ActiveDataprovider排序,yii,cactivedataprovider,Yii,Cactivedataprovider,房主们都在找工作。工作是由商人完成的。房主通过审查来审查工作的执行方式(基本上他们对一个商人进行评级) 房主和商人都是通过角色id区分的模范用户,除了用户我还创建了一个工作和一个审查模型。 除标题和描述外,还将对6个不同的评级实体进行审查,评分范围为1-10(灵活性、思维、预约、友好性、价格性能和质量)。一项工作的平均评级是这6个实体的总和除以6 评审通过以下关系与工作相关: 'job' => array(self::HAS_ONE, 'Job', 'review_id'), 工作回顾

房主们都在找工作。工作是由商人完成的。房主通过审查来审查工作的执行方式(基本上他们对一个商人进行评级)

房主和商人都是通过角色id区分的模范用户,除了用户我还创建了一个工作和一个审查模型。 除标题和描述外,还将对6个不同的评级实体进行审查,评分范围为1-10(灵活性、思维、预约、友好性、价格性能和质量)。一项工作的平均评级是这6个实体的总和除以6

评审通过以下关系与工作相关:

'job' => array(self::HAS_ONE, 'Job', 'review_id'),
工作回顾

'review' => array(self::BELONGS_TO, 'Review', 'review_id'),
工作通过以下关系与房主(用户)相关:

'createUser' => array(self::BELONGS_TO, 'User', 'create_user_id'),
'carriedOutByUser' => array(self::BELONGS_TO, 'User', 'carried_out_by_user_id'),
和一个房主(用户)到他张贴的工作:

'createdJobs' => array(self::HAS_MANY, 'Job', 'create_user_id'),
作业通过以下关系与其技工(用户)相关:

'createUser' => array(self::BELONGS_TO, 'User', 'create_user_id'),
'carriedOutByUser' => array(self::BELONGS_TO, 'User', 'carried_out_by_user_id'),
以及一名技工(用户)执行的工作:

'completedJobs' => array(self::HAS_MANY, 'Job', 'carried_out_by_user_id'),
好的,我想做的是创建一个商人列表,并根据他们的评级对他们进行排序。 我在userController文件中创建以下数据提供程序:

/**
* Lists all models.
*/
public function actionIndex()
{
        $dataProvider=new CActiveDataProvider(User::model()->active()->isTradesman());
        $this->render('index',array(
                'dataProvider'=>$dataProvider,
        ));
}
“活动”和“isTradesman”是筛选具有贸易员角色的活动用户的作用域

在Review模型中,我创建了一个方法:

public function getScore(){
    return ($this->flexibility + $this->thinking + $this->appointments + $this->friendliness + $this->priceperformance + $this->quality)/6;
}
所以,每一份工作我都能得到平均分。我还试图通过这样的关系得到这个分数:

 'score' => array(self::BELONGS_TO,'Review','review_id','select' => 'SUM(score.flexibility+score.quality+score.appointments+score.priceperformance+score.thinking+score.friendliness)/6 as total')
我还通过STAT关系尝试了它,但我无法让它工作,所以我选择了
getScore()
方法


现在,我必须在一个商人的基础上计算所有这些分数,并将其除以他/她完成的工作数量。然后,我想按照此值对
userController::actionIndex()
中的数据提供程序进行排序。这可以做到吗?如果可以,怎么做?

似乎这不能只用php来完成。所以我通过用户模型中的搜索方法修改了我的查询,如下所示

$criteria = new CDbCriteria;
$criteria->alias = 'usr';

$criteria->join = 'LEFT JOIN bp_job AS job ON `job`.`carried_out_by_user_id` = `usr`.`id` LEFT JOIN bp_review AS r ON r.id = job.review_id ';
$criteria->select = '(SUM(r.flexibility + r.quality + r.appointments + r.priceperformance + r.thinking + r.friendliness) / 6) / count(r.id) as score';
$criteria->order = 'score DESC';