Php 如何在yii2中过滤gridview表?
我目前有两个gridview表,一个显示所有数据,另一个只显示id=2的数据。是否可以只筛选一个表而不影响另一个表?我知道我可以从搜索模型中筛选,但这将影响所有表,我希望它只影响一个表 能给我两个数据提供者吗 这是我的搜索模型中的代码:Php 如何在yii2中过滤gridview表?,php,mysql,yii2,Php,Mysql,Yii2,我目前有两个gridview表,一个显示所有数据,另一个只显示id=2的数据。是否可以只筛选一个表而不影响另一个表?我知道我可以从搜索模型中筛选,但这将影响所有表,我希望它只影响一个表 能给我两个数据提供者吗 这是我的搜索模型中的代码: class JobPlanningSearch extends JobPlanning { /** * @inheritdoc */ public function rules() { return [
class JobPlanningSearch extends JobPlanning
{
/**
* @inheritdoc
*/
public function rules()
{
return [
[['id', 'priority', 'employer_id', 'client_id', 'status', 'activity'], 'integer'],
[['job_description', 'impediment', 'date', 'estimated_time', 'due_date'], 'safe'],
];
}
/**
* @inheritdoc
*/
public function scenarios()
{
// bypass scenarios() implementation in the parent class
return Model::scenarios();
}
/**
* Creates data provider instance with search query applied
*
* @param array $params
*
* @return ActiveDataProvider
*/
public function search($params)
{
$query = JobPlanning::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,
'priority' => $this->priority,
'client_id' => $this->client_id,
'employer_id' => $this->employer_id,
'estimated_time' => $this->estimated_time,
'status' => $this->status,
'activity' => $this->activity,
//'actual' => $this->actual,
//'actual' => 1,
]);
$query->andFilterWhere(['like', 'job_description', $this->job_description]);
$query->andFilterWhere(['like', 'activity', $this->activity]);
return $dataProvider;
}
您必须在控制器中操作数据提供程序
$searchModel = new JobPlanningSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->query->andWhere(['=','id',2]);
...
if(count(Yii::$app->request->queryParams) == 0){
$dataProvider->query->andWhere(['=','id',2]);
}
这只是一个示例,您应该检查queryparams中是否未发送ID字段。您需要使用两个搜索模型,每个GridView一个,当然还有两个数据提供程序 此外,您还需要更改其中一个SearchModel的
formName
属性,以避免过滤影响两个网格
在控制器中,当将参数传递给修改后的searchModel的
search()
方法时,以您在此searchModel中分配给formName的新名称传递参数。您需要两个数据提供程序,如下所示:
$searchModelOne = new JobPlanningSearch();
$dataProviderOne = $searchModelOne->search(Yii::$app->request->queryParams);
$dataProviderOne->pagination->pageParam = 'dp-one-page'; //set page param for first dataprovider
$searchModelTwo = new JobPlanningSearch();
searchModelTwo->id = 2; // set id = 2 in second dataprovider
$dataProviderTwo = $searchModelTwo->search(Yii::$app->request->queryParams);
$dataProviderTwo->pagination->pageParam = 'dp-two-page'; //set page param for second dataprovider
是的,您可以有两个数据提供程序,这就是方法。@Bizley好的,谢谢,我会尝试找到如何做到这一点,但这会影响所有人。我希望它只影响一个表。显然,您需要创建两个数据提供者。每张桌子一张。
$searchModelOne = new JobPlanningSearch();
$dataProviderOne = $searchModelOne->search(Yii::$app->request->queryParams);
$dataProviderOne->pagination->pageParam = 'dp-one-page'; //set page param for first dataprovider
$searchModelTwo = new JobPlanningSearch();
searchModelTwo->id = 2; // set id = 2 in second dataprovider
$dataProviderTwo = $searchModelTwo->search(Yii::$app->request->queryParams);
$dataProviderTwo->pagination->pageParam = 'dp-two-page'; //set page param for second dataprovider