我正在使用 Yii 的 Dataprovider 根据“点”列输出一堆用户;
它现在工作正常,但我必须添加一个功能,所以如果用户在线,他可以获得额外的 300 分。
假设 Jack 有 100 分,Richmond 有 300 分,但是 Jack 在线,所以 Jack 的排名应该比 Richmond 高。
这是我现在的解决方案:
$user=new Rank('search');
$user->unsetAttributes();
$user->category_id = $cid;
$dataProvider = $user->search();
$iterator = new CDataProviderIterator($dataProvider);
foreach($iterator as $data) {
//check if online ,update points
}
但是,这个 CDataProviderIterator 似乎将我的分页直接更改为最后一页,我什至不能再切换页面了。我应该怎么办?
非常感谢!
这是列表视图:
$this->widget('zii.widgets.CListView', array(
'id'=>'userslist',
'dataProvider'=>$dataProvider,
'itemView'=>'_find',
'ajaxUpdate'=>false,
'template'=>'{items}<div class="clear"></div><div style="margin-right:10px;"><br /><br />{pager}</div>',
'pagerCssClass'=>'right',
'sortableAttributes'=>array(
// 'create_time'=>'Time',
),
));
更新了 Rank.php 模型中的代码
$criteria->with = array('user');
$criteria->select = '*, (IF(user.lastaction > CURRENT_TIMESTAMP() - 1800, points+300, points)) as real_points';
$criteria->order = 'real_points DESC';
但是,它给我带来了错误:
Active record "Rank" is trying to select an invalid column "(IF(user.lastaction > CURRENT_TIMESTAMP() - 1800". Note, the column must exist in the table or be an expression with alias.