Yii2:Gridview中过滤值的列​​的总和

时间:2015-03-20 20:02:01

标签: php mysql yii2

我可以使用以下代码在gridview中汇总一列:

<?php
$command = Yii::$app->db->createCommand("SELECT sum(net_total) FROM estimate");
$sum = $command->queryScalar();
echo 'Total ='. $sum;
?>

我在数据库中有一列discharge_date(日期和时间字段),我想更改此列上过滤器的总和。也就是说,如果过滤后的数据显示五条记录,那么我只想要那五条记录的总和。 感谢。

根据答案进行更新

代码是这样的:

$query = app\models\Estimate::find();
$dataProvider = new ActiveDataProvider([
            'query' => $query,
            ]);
$ids = [];
foreach($dataProvider as $i => $model) {
    $ids[] = $model->id;}

$command = Yii::$app->db->createCommand("SELECT sum(net_total) FROM estimate WHERE `id` IN ('.implode(',',$ids).')"); // please use a prepared statement instead, just a proof of concept

$sum = $command->queryScalar();
echo $sum;

现在我收到了错误 $ids[] = $model->id;}Getting unknown property: yii\db\ActiveQuery::id

1 个答案:

答案 0 :(得分:1)

您是否尝试直接将此查询添加到ActiveDataprovider?如here所述,可以指定其他查询部分,这应该是一种可能的解决方案。或者,您可以尝试从ActiveDataprovider中提取结果中的ID,并使用它们来修改辅助查询。

第二种方法的例子:

// You should make sure that the same parameters are passed to
// the GridView's ActiveDataProvider and the Model's find() function
$idQuery = Estimate::find()->all();

$ids = [];
foreach ($idQuery as $i => $model) {
    $ids[] = $model['id'];
}

$command = Yii::$app->db->createCommand('SELECT sum(net_total) FROM estimate WHERE `id` IN ('.implode(',',$ids).')'); // please use a prepared statement instead, just a proof of concept
$sum = $command->queryScalar();
相关问题