大学院生id(grad_id)、資格、監督者の3つの列を持つテーブルがあります。課題は、各監督者がさまざまな資格(博士号、修士号、PGD、その他および合計)について何人いるかを見つけることです。問題は、テーブルビューを生成した後、管理者の名前を除外して、さまざまな資格カテゴリごとに管理する学生の数を確認できないことです。ビュー内のYii2 GridViewで条件付きでグループ化されたデータをフィルタリングする方法
私のGridViewには、次のようになります。以上により
GridView::widget([
'dataProvider' => $sup,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'supervisor',
'total',
'phd',
'masters',
'pgd',
'other',
],
])
、私はテーブルを生成することができますよ。 .../index.php?SupervisionSearch%5Bsupervisor%5D=david&SupervisionSearch%5Btotal%5D=&SupervisionSearch%5Bphd%5D=&SupervisionSearch%5Bmasters%5D=&SupervisionSearch%5Bpgd%5D=&r=student%2Fgrad-admissions%2Fsupervision
をSupervisionSearchクラスでは、私が試してみました:ページが更新されると(私はデビッドを検索したとき)のようなものにページのWeb URLが変更にもかかわらず、しかし、フィルタは、テーブルの内容を変更しない
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;
}
特定の管理者名を検索し、各資格カテゴリについて監督する学生の数を表示するために、フィルタを入手する際に助けが必要です。前もって感謝します。
ありがとうScaisEdge、私は 'where'の代わりに' andFilterWhere'を使用しようとしましたが、フィルタはまだ動作しません。 –
答えが更新されました。try comment // public $ supervisor;あなたの検索モデルで – scaisEdge
ありがとう、もう一度、私は 'public $ supervisor;'とコメントしましたが、それでもうまくいきませんでした。しかし、私は以下の答えとして投稿していることを回避するような仕事を試みました。 –