yii CGridView数据提供程序和筛选器

yii CGridView数据提供程序和筛选器,yii,cgridview,Yii,Cgridview,我知道我们可以用一个模型和它的搜索方法显示一个gridview并过滤结果,但是我们可以用另一个数据提供者和类似的另一个模型创建一个gridview并过滤它的结果吗?筛选器是否需要是数据提供程序的一部分 $attr = Yii::app()->request->getParam($name); $model = new User('search'); $model->unsetAttributes(); $model->setAttributes($attr); $th

我知道我们可以用一个模型和它的搜索方法显示一个gridview并过滤结果,但是我们可以用另一个数据提供者和类似的另一个模型创建一个gridview并过滤它的结果吗?筛选器是否需要是数据提供程序的一部分

$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在哪里使用?(此方法中不使用!)