1

以下代码正在工作,除了一件事。用于部门的过滤器应取决于在过滤器中为区域选择的值(一个部门属于一个区域)。我已尝试使用您在部门过滤器上看到的 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',
                    )
));
4

1 回答 1

0

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

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

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

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

您需要使用$model的属性进行过滤。由于您使用Region 列Fr_RegionId的任何对象的属性,因此您还可以使用它来进一步过滤您的 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

CHtml::listData(FrDepartment::model()->findAll(),'Id','NameFR')
于 2012-11-10T08:47:04.700 回答