Yii2 gridview过滤来自多个值的列表(不是下拉列表过滤器)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yii2 gridview过滤来自多个值的列表(不是下拉列表过滤器)相关的知识,希望对你有一定的参考价值。
我的gridview数据
day modeler total
2018-1-05 ABC 5
2018-1-06 DEF 8
2018-1-06 CAB 3
2018-1-06 GHI 3
2018-1-06 KLM 3
我有这样的网格视图。现在,只能逐个过滤建模器。我可以使用多行搜索框并只需粘贴“ABC DEF CAB”,它会过滤3个结果,如下所示?
day modeler total
2018-1-05 ABC 5
2018-1-06 DEF 8
2018-1-06 CAB 3
我的控制器
public function actionIndex()
{
$searchModel = new ModelerSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
我的搜索模型
public function search($params)
{
$query = Modeler::find();
// add conditions that should always apply here
$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;
}
// grid filtering conditions
$query->andFilterWhere([
'id' => $this->id,
]);
$query->andFilterWhere(['like', 'modeler', $this->modeler])
->andFilterWhere(['like', 'total', $this->total]);
return $dataProvider;
}
}
谢谢!
答案
您需要通过gridview中的modeler
字段进行搜索,并且您希望它以如下方式工作:如果您输入"ABC"
,它应该显示匹配的记录,如果您输入带空格的"ABC DEF"
,它应该显示2条匹配其中任何一条的记录。
所以,首先,在您的搜索模型添加之上
private $_selections = [];
然后将搜索功能更新为以下内容
public function search( $params ) {
$query = Modeler::find ();
// add conditions that should always apply here
$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;
}
if ( $this->modeler !== null && $this->modeler !== '' ) {
$this->_selections = preg_split ( '/\s+/i' , $this->modeler );
$query->andFilterWhere ( [ 'IN' , 'modeler' , $this->_selections ] );
}
// grid filtering conditions
$query->andFilterWhere ( [
'id' => $this->id ,
] );
$query->andFilterWhere ( [ 'like' , 'total' , $this->total ] );
return $dataProvider;
}
现在转到你的gridview并在过滤器输入modeler
中的"ABC DEF"
列类型中观察它。
以上是关于Yii2 gridview过滤来自多个值的列表(不是下拉列表过滤器)的主要内容,如果未能解决你的问题,请参考以下文章
不加载kartik 的select2 作为GridView 中的过滤器。 Yii2