繁体   English   中英

Yii2:Gridview中一列关于过滤值的总和

[英]Yii2: sum of a column on filtered values in Gridview

我可以使用以下代码在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

您是否尝试过将此查询直接添加到ActiveDataprovider? 指定额外的查询部分是可能的解释在这里 ,这应该是一个可能的解决方案。 或者,您可以尝试从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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM