【发布时间】:2017-09-03 07:19:14
【问题描述】:
我有一个三列的表,分别是研究生id(grad_id)、资格和导师。任务是找出每个主管有多少学生获得不同的资格(博士、硕士、PGD、其他和总计)。问题是,在生成表格视图后,我无法过滤出主管的姓名,以查看他/她在各种资格类别中监督了多少学生。
我在视图中的 GridView 如下所示:
GridView::widget([
'dataProvider' => $sup,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'supervisor',
'total',
'phd',
'masters',
'pgd',
'other',
],
])
通过以上,我能够生成表格。但是过滤器不会改变表格的内容,即使页面被刷新并且页面网址更改为(当我搜索 david 时):.../index.php?SupervisionSearch%5Bsupervisor%5D=david&SupervisionSearch%5Btotal%5D=&SupervisionSearch%5Bphd%5D=&SupervisionSearch%5Bmasters%5D=&SupervisionSearch%5Bpgd%5D=&r=student%2Fgrad-admissions%2Fsupervision
在我尝试过的 SupervisionSearch 类中:
public $supervisor;
public $phd;
public $masters;
public $pgd;
public $other;
public $total;
public function rules()
{
return [
[['supervisor','phd', 'masters', 'pgd', 'other', 'total'], 'safe'],
[['phd', 'masters', 'pgd', 'other', 'total'], 'number'],
[['supervisor'], 'string'],
];
}
public function scenarios()
{
// bypass scenarios() implementation in the parent class
return Model::scenarios();
}
public function search($params)
{
$query = (new \yii\db\Query())
->select(["supervisor, sum(qualification = 'PhD') as phd", "sum(qualification = 'Masters') as masters", "sum(qualification = 'PGD') as pgd", "sum(qualification <> 'PhD' and qualification <> 'Masters' and qualification <> 'PGD')as other", "count(grad_id) as total"])
-> from('grad_students')
-> where("supervisor <> ''")
-> orderBy('total desc')
-> groupBy('supervisor');
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
// $query->where('0=1');
return $dataProvider;
}
$query->andFilterWhere(['like', 'supervisor', $this->supervisor]);
return $dataProvider;
}
我需要帮助来获取过滤器以搜索特定主管姓名并显示他们在每个资格类别中监督的学生人数。提前致谢。
【问题讨论】: