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