2015-05-28 10:56:36 8431次浏览 3条回答 3 悬赏 100 金钱

数据库是这样

20150528105244.jpg

我想实现的sql是这样
select *, sum(money) as sumMoney from table GROUP BY userId order by sumMoney desc

yii中是这样写的


$dataProvider = new ActiveDataProvider([
            'query' => (new \yii\db\Query)->select(['*', 'sum(money) as sumMoney'])->from('za_shared_revenue_record')->groupBy('userId')->orderBy('sumMoney desc'),
        ]);

问题来了,这样的结果 dataProvider 是不对的,没法在 GridView 中使用 sumMoney 。

求大神出招,怎么在 GridView 中使用 sumMoney。

最佳答案

  • 回答于 2015-05-28 13:05 举报

    1 派生yii\grid\DataColumn类,派生类中重载init函数,在init函数中给$this->content赋值即可(当然实际操作上应该是在这里调用另一个随便什么自定义的函数)。例如如下代码片段:

    class Mediafilescolumn extends DataColumn
    {
        public function init()
        {
            $this->content = [$this, 'makeCellContent'];
        }    
    
        protected function makeCellContent($model)
        {
            # 注意这里可以访问$model,所以你的sumMoney也可以取到
            ...
            return sprintf('%d', $model->sumMoney);
        }    
    

    2 在GridView中'columns'属性中增加这个列,指明class为上述的派生类即可:

    'columns' => [
        ...
        [
            'class' => 'app\modules\advertise\models\MediaFilesColumn',
            'label' => 'Media Files',
            'options'=>['width'=>'10%',],
        ],
    
  • 回答于 2018-03-01 10:16 举报

    页面怎么实现的 在gridview外可以调用吗?

您需要登录后才可以回答。登录 | 立即注册
雅戈
见习主管

雅戈

注册时间:2014-10-11
最后登录:2020-08-05
在线时长:10小时7分
  • 粉丝7
  • 金钱255
  • 威望10
  • 积分455

热门问题