2015-09-30 31 views
1

我有一個GridView和6個過濾器選項放置在單選按鈕上。當我點擊一個過濾器時,GridView將根據被點擊的過濾器而改變。這裏有一個畫面:Yii2基於過濾器選項的列的總和

enter image description here

現在,我想根據選擇的過濾器在桌子上的總Converted Amount。例如,如果我選擇Draft過濾器,表格將顯示所有Draft報銷款項,並將總計其Converted Amount,並且總額將放置在表格上方的右上方,如照片所示。

我試過這個Google搜索解決方案,但我找不到答案。這裏是我的代碼在我的控制器的一個片段:

$refreshData = false; 

if (isset(Yii::$app->request->getBodyParams()['sortby'])) { 
    $refreshData = true; 
    $sortby = Yii::$app->request->getBodyParams()['sortby']; 
} else { 
    $sortby = 'Show All'; 
    $dataProvider = new ActiveDataProvider([ 
     'query' => Reimbursement::find()->where(['company_id' => new \MongoId($session['company_id'])]) 
    ]); 
} 

// get all reimbursements 
$reimbursements = Reimbursement::findAll(['company_id' => new \MongoId($session['company_id'])]); 

if (isset(Yii::$app->request->getBodyParams()['sortby'])) { 
    if(Yii::$app->request->getBodyParams()['sortby'] != '' && Yii::$app->request->getBodyParams()['sortby'] != 'Show All') { 
     $refreshData = true; 
     $reimbursements = Reimbursement::findAll(['company_id' => new \MongoId($session['company_id']), 'status' => Yii::$app->request->getBodyParams()['sortby']]); 
     // $ids = []; 
     // foreach ($reimbursements as $i => $model) { 
     //  $ids[] = $model['_id']; 
     // } 

     // $command = Yii::$app->db->createCommand('SELECT sum(total) FROM estimate WHERE `_id` IN ('.implode(',',$ids).')'); // please use a prepared statement instead, just a proof of concept 
     // $sum = $command->queryScalar(); 
    } elseif (Yii::$app->request->getBodyParams()['sortby'] == 'Show All') { 
     $refreshData = true; 
    } 
} 

$dataProvider = new ArrayDataProvider([ 
    'allModels' => $reimbursements, 
]); 

if($refreshData) { 
    return $this->renderPartial('_index', [ 
     'dataProvider' => $dataProvider, 
    ]); 
} 

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

正如你可能已經注意到我評論的一些代碼行下面if(Yii::$app->request->getBodyParams()['sortby'] != '' && Yii::$app->request->getBodyParams()['sortby'] != 'Show All')條件。我試過那個,它不起作用。

我該如何實施?

回答

0
 $reimbursements = Reimbursement::find()->where(['company_id' => new \MongoId($session['company_id'])]); 

    if (isset(Yii::$app->request->getBodyParams()['sortby'])) { 
     $refreshData = true; 
     $sortby = Yii::$app->request->getBodyParams()['sortby']; 
     $reimbursements->andWhere(['status' => Yii::$app->request->getBodyParams()['sortby']]); 
    } else { 
     $refreshData = false; 
     $sortby = 'Show All'; 
    } 

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

    $totalSum = $reimbursements->sum('total'); 
+0

你能解釋一下這個答案嗎?謝謝。 – kaynewilder

+0

它返回一個錯誤'調用一個非對象的成員函數sum()' – kaynewilder

+0

$ reimbursements是一個yii \ db \ Query對象。你可以在ActiveDataProvider中使用這個對象作爲查詢參數,通過這個查詢選擇所有的行($ reimbursements-> all()as select * from ...)或者選擇列的總和($ reimbursements-> sum('column')as從...中選擇總和(列)) – Elvira

相關問題