yii CGridView数据提供程序和筛选器
我知道我们可以用一个模型和它的搜索方法显示一个gridview并过滤结果,但是我们可以用另一个数据提供者和类似的另一个模型创建一个gridview并过滤它的结果吗?筛选器是否需要是数据提供程序的一部分yii CGridView数据提供程序和筛选器,yii,cgridview,Yii,Cgridview,我知道我们可以用一个模型和它的搜索方法显示一个gridview并过滤结果,但是我们可以用另一个数据提供者和类似的另一个模型创建一个gridview并过滤它的结果吗?筛选器是否需要是数据提供程序的一部分 $attr = Yii::app()->request->getParam($name); $model = new User('search'); $model->unsetAttributes(); $model->setAttributes($attr); $th
$attr = Yii::app()->request->getParam($name);
$model = new User('search');
$model->unsetAttributes();
$model->setAttributes($attr);
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $myDataProvider,
'filter' => $model,
'columns' => array(
array(
'name' => 'username',
'type' => 'raw',
'value' => 'CHtml::encode($data->username)'
),
array(
'name' => 'email',
'type' => 'raw',
),
),
)))
上面的代码不起作用,我需要在以前制作的数据提供程序上添加一个过滤器
顺便说一句,
$attr
具有有效的数据,但未对网格进行筛选。筛选器不需要是dataprovider的一部分,但如果要将模型用于筛选,则data provider需要将其考虑在内
默认情况下,这样做的方式是在模型上使用search
方法创建数据提供程序,该方法根据模型值设置数据提供程序的条件,如下所示:
'dataProvider' => $model->search()
没有任何东西阻止您创建不同的数据提供程序,例如:
'dataProvider' => $model->createAnotherDataProvider()
在您的用户模型中:
public function createAnotherDataProvider() {
{
// create your second data provider here
// with filtering based on model's attributes, e.g.:
$criteria = new CDbCriteria;
$criteria->compare('someAttribute', $this->someAttribute);
return new CActiveDataProvider('User', array(
'criteria' => $criteria,
));
}
$model
不影响$myDataProvider
,因为数据提供程序不是使用此模型获取的
$model->search()
返回一个CActiveDataProvider
,其中包含一个CDbCriteria
实例。不同的CDB标准
可以使用组合。因此,如果您希望使用$model
...
$model->setAttributes($attr);
$newDataProvider=$model->search();
$myDataProvider->criteria->mergeWith($newDataProvider->criteria);
$this->widget('zii.widgets.grid.CGridView', array(
...
如果其中一个条件有一个“join”属性,另一个有一个“with”属性,您会遇到麻烦,对吗?新的$criteria在哪里使用?(此方法中不使用!)