我们可以在yii2 gridview中自定义搜索吗
问题描述:
我正在使用yii2 gridview应用程序,默认情况下会提供搜索选项。如果条目“包含”给定的值,griview搜索会给出结果。也就是说,如果我们在搜索框中键入“ab”,那么它会给出包含“ab”的结果。我们可以在yii2 gridview中自定义搜索吗
<?php
$query->andFilterWhere(['like', 'name', $this->name])
->andFilterWhere(['like', 'alias', $this->alias])
->andFilterWhere(['like', 'company_mail', $this->company_mail])
?>
我想要搜索以“ab”开头吗? 如何做到这一点?
答
为数据提供程序
GridView中显示的数据,你可以在喜欢的actionIndex
你可以看到dataProvider是建立USIG搜索模式作为YourmodelSearc(新类)与方法搜索()
public function actionIndex()
{
$searchModel = new YourModelSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
和tipically搜索功能contail查找()和AndFliter()函数构建dinamically查询的数据提供程序
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;
}
而延伸的,重新定义或操纵搜索()或建立一个新的customSeach() 应用多个过滤器或chainging查询过滤
为like
运营商的默认行为时yii2过滤默认是不是你需要你可以尝试在字符串格式中使用andWhere。
做的事实,andFilterWhere don'k允许使用文字conditition的,你可以添加一个简单的andWhere测试空值 的查询建筑规范底部
$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;
我应该怎么做才能让搜索上开始信的基础?意味着如果我在搜索文本框中输入“ab”它会给出以“ab”开头的条目 – Goli
,以“ab”开头的字符串(mysql中的别名,比如'ab%'),而fFilterWhere的正常行为应该足够 - 如果你想匹配二进制“ab”,你可能需要=而不是像 – scaisEdge
实际上它采用的是字母“%ab%”而不是“ab%”。和我只是想它给字符串开始在搜索文本框中的alphabates – Goli