我正在使用yii2 gridview应用程序,它默认提供搜索选项。如果条目“包含”给定值,则griview搜索会给出结果。如果我们在搜索框中键入“ab”,那么它将给出包含“ab”的结果。
<?php
$query->andFilterWhere(['like', 'name', $this->name])
->andFilterWhere(['like', 'alias', $this->alias])
->andFilterWhere(['like', 'company_mail', $this->company_mail])
?>
我想要的是搜索以“ab”开头? 怎么做?
答案 0 :(得分:1)
dataProvider的gridview显示数据
正如你可以在一个典型的gridview相关动作中看到的,比如actionIndex
你可以看到dataProvider使用方法search()
使用搜索模型作为YourmodelSearc()的新类构建public function actionIndex()
{
$searchModel = new YourModelSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
和一个搜索函数小心地包含find()和AndFliter()函数,用于构建对于dataProvider
的查询public function search($params)
{
$query = YourModel::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
if (!($this->load($params) && $this->validate())) {
return $dataProvider;
}
$query->andFilterWhere([
'your_numeric_col1' => $this->your_col1,
'your_numeric_col2' => $this->your_col2,
......
'id' => $this->id,
]);
$query->andFilterWhere(['like', 'your_string_colx', $this->your_string_colx])
->andFilterWhere(['like', 'your_string_coly', $this->your_string_coly])
.......
->andFilterWhere(['like', 'your_string_coln', $this->your_string_coln]);
return $dataProvider;
}
扩展,重新定义或操纵search()或构建新的customSeach() 您应用多个过滤器或查询查询过滤器的默认行为
对于like
运算符,如果yii2过滤默认值不是您所需要的,您可以尝试使用字符串格式的andWhere。
事实上,在没有允许使用文字条件的情况下,你可以添加一个简单的,并且可以为null值进行测试 查询构建代码的底部
$query->andFilterWhere(['like', 'your_string_colx', $this->your_string_colx])
.......
->andFilterWhere(['like', 'your_string_coln', $this->your_string_coln]);
if (isset($this->your_string_coly)){
$query->andWhere('your_string_coly like concat("%", :param1)',
[':param1'=> $this->your_string_coly])
}
return $query;