2016-11-16 87 views
0

的页脚我是新来的,我不能发表评论hereYii2:获取总和的GridView

,我有一个问题,当我试图让页脚中的总和。

我的代码中的控制器:

$searchModel = new ReceiptsSearch(); 
$sum = new ReceiptsSearch(); 
$dataProvider = $searchModel->search(Yii::$app->request->queryParams); 
return $this->render('index', [ 
    'searchModel' => $searchModel, 
    'dataProvider' => $dataProvider, 
    'sum'=>$sum, 
    ]); 

我SearchModel代码:

public function search($params) 
{ 
    $query = Receipts::find(); 
    $sum = $query->sum('price'); 
    $dataProvider = new ActiveDataProvider([ 
     'query' => $query, 
    ]); 

    $this->load($params); 

    if (!$this->validate()) { 
     return $dataProvider; 
    } 
    $query->joinWith('patient'); 
    $query->andFilterWhere([ 
     'id' => $this->id, 
     'price' => $this->price, 
     'reg_date' => $this->reg_date, 
    ]); 
    $query->andFilterWhere(['like','patient.patient_name',$this->patient_id]); 

    return $dataProvider;$sum; 
} 

我的视图页面

<?= GridView::widget([ 

    'dataProvider' => $dataProvider,$sum, 

    'filterModel' => $searchModel, 
    'showFooter' => true, 
    'columns' => [ 

     ['class' => 'yii\grid\SerialColumn'], 

     [ 
     'attribute'=>'patient_id', 
     'value'=>'patient.patient_name' 
     ], 
     'price', 
     ], 
     [ 
     'attribute' => 'sum', 
     'footer' => 'sum', 
     ], 
     ['class' => 'yii\grid\ActionColumn'], 
    ], 
    ]); 
?> 

所示的消息是:

设置未知属性:警予\网\ GridView控件:: 0

+0

[这将有助于(http://stackoverflow.com/questions/28003381/yii2-gridview-how-use-totals-on-footer-property)。 –

+0

@InsaneSkull我只是想知道代码的哪一部分将进入控制器或searchmodel并查看..如何使用该解决方案。 –

回答

4

控制器

$searchModel = new ReceiptsSearch(); 
$dataProvider = $searchModel->search(Yii::$app->request->queryParams); 

return $this->render('index', [ 
    'searchModel' => $searchModel, 
    'dataProvider' => $dataProvider, 
]); 

SearchModel

public function search($params) 
{ 
    $query = Receipts::find()->joinWith('patient'); 

    $dataProvider = new ActiveDataProvider([ 
    'query' => $query, 
    ]); 

    $this->load($params); 

    if (!$this->validate()) { 
     return $dataProvider; 
    } 

    $query->andFilterWhere([ 
    'id' => $this->id, 
    'price' => $this->price, 
    'reg_date' => $this->reg_date, 
    ]); 

    $query->andFilterWhere(['like','patient.patient_name',$this->patient_id]); 

    return $dataProvider; 
} 

查看

<?= GridView::widget([ 
    'dataProvider' => $dataProvider, 
    'filterModel' => $searchModel, 
    'showFooter' => true, 
    'columns' => [ 
     ['class' => 'yii\grid\SerialColumn'], 

     [ 
     'attribute' => 'patient_id', 
     'value' => 'patient.patient_name' 
     ], 
     [ 
     'attribute' => 'price', 
     'footer' => Receipts::getTotal($dataProvider->models, 'price'),  
     ], 

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

收益模式

public static function getTotal($provider, $fieldName) 
{ 
    $total = 0; 

    foreach ($provider as $item) { 
     $total += $item[$fieldName]; 
    } 

    return $total; 
} 
+1

我之前告诉过你,你是一个天才,而不是疯狂**它的作品,因为我想** :) ..谢谢 –

+0

@NaeemAli告诉你我疯了,这就是为什么天才。 :) –

+0

非常棒的解决方案,非常感谢。 –

0

页脚通常用于总成绩为列(不分离柱)

假设$sum是你想看到的值下面列的价格,你要高度重视

<?= GridView::widget([ 
    'dataProvider' => $dataProvider 
    'filterModel' => $searchModel, 
    'showFooter' => true, 
    'columns' => [ 
     ['class' => 'yii\grid\SerialColumn'], 
     [ 
     'attribute'=>'patient_id', 
     'value'=>'patient.patient_name' 
     ], 
     [ 
     'attribute'=>'price', 
     'footer' => $sum,  
     ], 
     ['class' => 'yii\grid\ActionColumn'], 
    ], 
    ]); 
?> 

但希望你的代码中有几个错误..

在搜寻这是错误

return $dataProvider;$sum; 

可以返回一个值,只有这样,你应该

return $dataProvider; 

在你的控制器,这是错误的

$searchModel = new ReceiptsSearch(); 
$sum = new ReceiptsSearch(); 

为$总和的结果是一样的,对于$ searcModel没有新价值返回$ sum

您应该执行$ sum这种方式的查询

$sum = Receipts::find()->sum('price'); 



$searchModel = new ReceiptsSearch(); 
$sum = Receipts::find()->sum('price'); 
$dataProvider = $searchModel->search(Yii::$app->request->queryParams); 
return $this->render('index', [ 
    'searchModel' => $searchModel, 
    'dataProvider' => $dataProvider, 
    'sum'=>$sum, 
    ]); 
+0

仍然给我'设置未知的属性:yii \ grid \ GridView :: 0' –

+0

1)删除$ sum形式的'dataProvider'行像我的代码2)最后只是为了调试尝试评论行'价值'=> 'patient.patient_name' – scaisEdge

+0

@scaisEedge'trim()期望参数1是字符串,对象给定' –

1

可以达到与use kartik\grid\GridView;同样的效果,而无需使用助手功能。

只需将'showPageSummary' => true添加到您的GridView配置并将pageSummary' => true添加到您需要求和的列。

查看

use kartik\grid\GridView; 

echo GridView::widget([ 
     'dataProvider' => $dataProvider, 
     'filterModel' => $searchModel, 
     'showPageSummary' => true, 
     'columns' => [ 
      ['class' => 'yii\grid\SerialColumn'], 
      [ 
       'attribute' => 'patient_id', 
       'value' => 'patient.patient_name' 
      ], 
      [ 
       'attribute' => 'price', 
       'pageSummary' => true 
      ], 
      ['class' => 'yii\grid\ActionColumn'], 
     ], 
]); ?> 
+0

你在1年3个月后回答了我的问题:),是的,你可以做到这一点,我经验得到了这个答案:P –