Как умножить два столбца в виде сетки yii2 - PullRequest
0 голосов
/ 26 апреля 2018

Я хочу умножить два столбца в сетке 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'],
        ],
    ]); ?>

Но это не дает мне желаемый результат, где я иду не так, как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

, если вы хотите использовать расчет в любом месте, вы можете сделать следующее. в вашей модели

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

и вы можете пометить этот атрибут

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

в столбце вида сетки

...
'cpview',
'totalcost'

Вы можете использовать эту функцию где угодно как $ model-> totalcost

0 голосов
/ 04 мая 2018

Я решил проблему с помощью запроса 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;
0 голосов
/ 26 апреля 2018

Если вам нужен столбец только как отображаемое значение в виде сетки, вы можете создать вычисляемый столбец.

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

Или вы можете добавить в начале вашего класса Adanalytics

public $totalccost;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...