【问题标题】:How to multiply two columns in yii2 grid view如何在yii2网格视图中将两列相乘
【发布时间】:2018-04-26 10:43:35
【问题描述】:

我想在yii2网格中将两列相乘,网格视图如下

<?= GridView::widget([
        //'dataProvider' => $dataProvider,
        'dataProvider'=>new ActiveDataProvider([
          'query' => Adanalytics::find()->
                where(['publisher_id' =>  Yii::$app->user->identity->id ])->
                select('id,ad_id,MAX(impression) AS impression, MAX(view) AS view, MAX(clicks) AS clicks,MAX(cpc) AS cpclick,MAX(cpv) AS cpview, (MAX(clicks)*MAX(cpc)) AS totalccost')->
                groupBy('ad_id, visitor_ip'),
        ]),
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            //'id',
            'ad_id',
            //'advertiser_id',
            //'publisher_id',
            //'visitor_ip',
            //'type_ad',
            'impression',
            'view',
            'clicks',
            //'placed_date',
            //'cpc',
            //'cpv',
            'cpclick',
            'cpview',
            'totalccost',
            //'cpi',

            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>

但它没有给我想要的输出我哪里出错了我该怎么做?

【问题讨论】:

  • 当您使用 ActiveDataProvider 时,您必须将 totalccost 作为公共属性添加到您的 Adanalytics 模型中
  • @RiyasKpYiideveloper 你能给我举个例子吗?

标签: php mysql gridview yii2


【解决方案1】:

如果您只需要该列作为网格视图中的显示值,您可以创建一个计算列。

'cpview',
[
    'label' => 'Totalcost',
    'value' => function($model){
        return $model->cpclick * $model->clicks;
    }
],

或者您可以在 Adanalytics 课程的开头添加

public $totalccost;

【讨论】:

    【解决方案2】:

    如果您想在任何地方使用计算,您可以执行以下操作。 在你的模型中

    public function getTotalcost() 
    {
       return $this->clicks * $this->cpclick; 
    }
    

    你可以给这个属性加标签

    public function attributeLabels()
    {
        return [
            ...
            'totalcost' => Yii::t('app', 'Total cost'),
        ];
    }
    

    在网格视图列中

    ...
    'cpview',
    'totalcost'
    

    你可以在任何地方使用这个函数作为 $model->totalcost

    【讨论】:

    • 如何将它添加到网格视图的底部我的网格视图。
    【解决方案3】:

    我已经通过使用 yii2 db 查询解决了这个问题。

    $subquery = Adanalytics::find()->
                select('id,ad_id,date_event,max(cpc) cpclick,max(cpv) cpview,max(impression) impression,max(view) view,max(clicks) clicks,visitor_ip,publisher_id')->
                from('ad_analytics')->
                where(['publisher_id' =>  Yii::$app->user->identity->id ])->
                groupBy('ad_id,date_event,visitor_ip');
      $query=Adanalytics::find()->
            select('ad_id,date_event,sum(cpclick) total_click_cost,sum(cpview) total_view_cost,sum(impression) total_impression,sum(view) total_views,sum(clicks) total_clicks,publisher_id')->
            from(['t'=>$subquery])->
            groupBy('t.ad_id,t.date_event');
    

    并在网格视图中调用列。

    'columns' => [
            ['class' => 'yii\grid\SerialColumn'],
            'ad_id',
            'total_impression',
            'total_views',
            'total_clicks',
            'total_click_cost',
            'total_view_cost',
            'date_event',
    
    
            ['class' => 'yii\grid\ActionColumn'],
        ],
    

    在调用之前在模型中定义它们。

      public $total_click_cost;
       public $total_view_cost;
       public $total_impression;
       public $total_views;
       public $total_clicks;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      相关资源
      最近更新 更多