2
こんにちはすべて私はSQLDataProviderでグリッドビューを持っており、私はModelSearchをやっています。インターネット上のすべてのチュートリアルはActiveDataProviderを使用しており、私は自分のデータベースを使用しているためにActiveRecordを使用したくありません。Yii2グリッドビューフィルタSQL
私の質問は、MyModelSearchの検索方法でフィルタを追加するにはどうすればいいですか?
ここに私のコード:
コントローラー:
$queryTR = Yii::$app->db->createCommand(
"select idTypeRessource, nomTypeRessource from type_ressource"
)->queryAll();
$typeRessource = ArrayHelper::map($queryTR, 'idTypeRessource', 'nomTypeRessource');
$searchModel = new RessourceSearch();
$dataProvider = $searchModel->search(Yii::$app->request->get());
$model = $dataProvider->getModels();
return $this->render('ressource',
[
'dataProvider' => $dataProvider,
'searchModel' => $searchModel,
'model' => $model,
'typeRessource' => $typeRessource,
]
);
ModelSearch:
class RessourceSearch extends Ressource
{
public $nomRessource;
public $idTypeRessource;
public $idEtatRessource;
public $dateRecherche;
public function rules()
{
/*...*/
}
public function search($param)
{
$query = "select idTypeRessource, nomRessource, nomTypeRessource, nomEtatRessource,
date_format(tr.dateDebut, '%d/%m/%Y %H:%i') as trDateDebut,
date_format(tr.dateFin, '%d/%m/%Y %H:%i') as trDateFin,
date_format(er.dateDebut, '%d/%m/%Y %H:%i') as erDateDebut,
date_format(er.dateFin, '%d/%m/%Y %H:%i') as erDateFin
from ressource
join historique_type_ressource tr using (idRessource)
join type_ressource using(idTypeRessource)
join historique_etat_ressource er using (idRessource)
join etat_ressource using (idEtatRessource)";
$count = \Yii::$app->db->createCommand(
"select count(*) from (" . $query . ") as req"
)->queryScalar();
$dataProvider = new SqlDataProvider([
'sql' => $query,
'key' => 'nomRessource',
'totalCount' => $count,
'pagination' => [
'pageSize' => 15,
],
]);
$dataProvider->sort->attributes['nomRessource'] = [
'asc' => ['nomRessource' => SORT_ASC],
'desc' => ['nomRessource' => SORT_DESC],
];
if (!($this->load($param) && $this->validate())) {
return $dataProvider;
}
return $dataProvider;
}
}
そして、私はこれでActiveDataProviderを(SQLDataProviderを使用していないよので、私は、フィルタルールを追加することはできませんあなたが最後に使うもの$query->andFilterWhere(...)
ありがとうございました
sqlをsqlビューに囲み、そのsqlビューからモデルを作成できます。その後、そのデータにActiveDataProviderを適用します。 –