CGridView依赖listData过滤器

时间:2012-11-09 13:50:53

标签: yii

以下一段代码正在运行,除了一件事。用于部门的过滤器应该取决于区域过滤器中选择的值(部门属于一个区域)。我已尝试使用您在部门过滤器上看到的FindAllByAttributes(),但它无法正常工作。我可以使用FindAll(),但两个过滤器不相关。关于如何实现这一点的任何想法?

感谢

$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'mainGrid',
'dataProvider'=>$model->filterForDefaultSalesUserManagement(),
'filter'=>$model,
'columns'=>array(
                    array(
                            'class'=>'CCheckBoxColumn',
                            'id'=>'checkedColumn',
                            'selectableRows'=>2
                         ),
                    array(
                            'name'=>'Fr_RegionId',
                            'header'=>'Region',
                            'value'=>'$data->frDepartment->frRegion->NameFR',
                            'filter'=>CHtml::listData(FrRegion::model()->findAll(),'Id','NameFR')
                         ),
                    array(
                            'name'=>'Fr_DepartmentId',
                            'header'=>'Department',
                            'value'=>'$data->frDepartment->NameFR',
                            'filter'=>CHtml::listData(FrDepartment::model()->findAllByAttributes(
                                    array(),
                                    $condition = "fr_RegionId = :regionId",
                                    $params = array(':regionId'=>$data->frDepartment->frRegion->Id)
                                    ),
                                    'Id','NameFR')
                         ),
                    'PostalCode',
                    'NameFR',
                    )
));

1 个答案:

答案 0 :(得分:0)

将部门过滤的参数更改为以下内容:

array(':regionId'=>$model->Fr_RegionId)

假设Region的过滤已经有效,那么这也应该有用。

您当前发布的代码无效,因为您尝试访问$data对象,该对象在您使用它的范围内不存在。它仅用于每行,并且引用通过dataProvider返回的对象。

您需要使用$model的属性进行过滤。由于您使用的任何对象Fr_RegionId的{​​{1}}属性属于Region列,因此您还可以使用它来进一步过滤Department列。

注意:您可能必须调整是否甚至根本过滤部门,就好像$model属性中没有设置任何内容一样,然后它将尝试匹配部门空白的位置。或者它会引发错误,具体取决于您设置数据库的方式。

FR_RegionId

尝试以上方法。如果从“区域”下拉框中选择'filter'=>$model->Fr_RegionId? CHtml::listData(FrDepartment::model()->findAllByAttributes( array(), "fr_RegionId = :regionId", array(':regionId'=>$model->Fr_RegionId)), 'Id','NameFR'): false, ,则应该允许您过滤部门,否则它将不允许您进行过滤。

或者,如果您想在未选择任何地区的情况下让每个部门都可用,请将Fr_RegionId替换为

false