Yii2 сетка просмотра фильтра sql

Привет всем, у меня есть вид сетки с SQLDataProvider, и я делаю ModelSearch. Каждый учебник в Интернете с ActiveDataProvider, и я не хочу использовать ActiveRecord из-за того, как я использую свою базу данных.

Итак, мой вопрос: как я могу добавить фильтр в метод поиска 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;
}
}

И я не могу добавить правило фильтра, потому что я использую SQLDataProvider, а не ActiveDataProvider (с этим последним вы должны использовать $query->andFilterWhere(...)

Спасибо

2

Решение

Более простой (но не очень удобный) способ — эмулировать поведение ‘andFilterWhere’:

if (isset($param['your_field'])){
$query .= " AND your_table.your_filed =  '" . $param['your_field ."';"}

Это должно быть повторено для всех полей фильтров.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]