爲數據提供程序
GridView中顯示的數據,你可以在喜歡的actionIndex
一個tipical gridview的相關行動見
你可以看到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