1
我有一個GridView
和6個過濾器選項放置在單選按鈕上。當我點擊一個過濾器時,GridView
將根據被點擊的過濾器而改變。這裏有一個畫面:Yii2基於過濾器選項的列的總和
現在,我想根據選擇的過濾器在桌子上的總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')
條件。我試過那個,它不起作用。
我該如何實施?
你能解釋一下這個答案嗎?謝謝。 – kaynewilder
它返回一個錯誤'調用一個非對象的成員函數sum()' – kaynewilder
$ reimbursements是一個yii \ db \ Query對象。你可以在ActiveDataProvider中使用這個對象作爲查詢參數,通過這個查詢選擇所有的行($ reimbursements-> all()as select * from ...)或者選擇列的總和($ reimbursements-> sum('column')as從...中選擇總和(列)) – Elvira