Yii2 SqlDataProvider筛选器
我正在努力解决如何在我的网格中使用一个过滤器,当它是从 目前,我的模型是这样工作的:Yii2 SqlDataProvider筛选器,yii2,filtering,Yii2,Filtering,我正在努力解决如何在我的网格中使用一个过滤器,当它是从 目前,我的模型是这样工作的: $sql = 'SELECT * FROM my_table'; $provider = new SqlDataProvider([ 'sql' => $sql, 'params' => [':start' => $param1, ':end' => $param2], 'totalCount' => $count, 'p
$sql = 'SELECT * FROM my_table';
$provider = new SqlDataProvider([
'sql' => $sql,
'params' => [':start' => $param1, ':end' => $param2],
'totalCount' => $count,
'pagination' => [
'pageSize' => 100
],
]);
return $provider;
当没有活动记录时,应如何执行此操作?搜索模型似乎都基于AR并调用控制器:
$searchModel->search(Yii::$app->request->queryParams);
其中$searchModel函数的开头如下:
public function search($params)
{
$query = myTable::find();
// add conditions that should always apply here
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
...
$query = new Query;
$query->select('*')
->from('my_table');
// add conditions that should always apply here
$dataProvider = new SqlDataProvider([
'sql' => $query->createCommand()->sql,
'pagination' => [
'pageSize' => 100
],
]);
我已经开始将search()函数更改为更像这样的函数,但不确定是否正确:
$query = new Query;
$query->select('*')
->from('my_table');
// add conditions that should always apply here
$dataProvider = new SqlDataProvider([
'sql' => $query,
'pagination' => [
'pageSize' => 100
],
]);
因为它与
preg_match()要求参数2为字符串,对象为给定值
对于一个模型的activeRecord(由gii生成),您有一个包含搜索函数的modelSearch.php
在本例中是用户模型serach
/**
* @param $params
* @return ActiveDataProvider
*/
public function search($params)
{
$query = $this->finder->getUserQuery();
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
if (!($this->load($params) && $this->validate())) {
return $dataProvider;
}
if ($this->created_at !== null) {
$date = strtotime($this->created_at);
$query->andFilterWhere(['between', 'created_at', $date, $date + 3600 * 24]);
}
$query->andFilterWhere(['like', 'username', $this->username])
->andFilterWhere(['like', 'email', $this->email])
->andFilterWhere(['registration_ip' => $this->registration_ip]);
return $dataProvider;
}
过滤器功能通过以下各项的适当组合执行:
$query->andFilterWhere(....)
每一项都与正确的列名和参数变量有关,例如:
$query->andFilterWhere(['like', 'username', $this->username]);
如果您的模型或数据提供者需要类似的行为,您可以重复类似的模式
$query = new Query;
$query->select('*')
->from('my_table');
$query->andFilterWhere('start', $param1);
对于
SqlDataProvider
,您需要提供一个SQL字符串。在这里,您给出了一个查询对象,但您可以得到如下SQL:
public function search($params)
{
$query = myTable::find();
// add conditions that should always apply here
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
...
$query = new Query;
$query->select('*')
->from('my_table');
// add conditions that should always apply here
$dataProvider = new SqlDataProvider([
'sql' => $query->createCommand()->sql,
'pagination' => [
'pageSize' => 100
],
]);
谢谢,我刚弄明白