1

次のコードは、1つを除いて機能しています。部門に使用されるフィルターは、地域のフィルターで選択された値に依存する必要があります(部門は1つの地域に属します)。部門フィルターに表示されるFindAllByAttributes()を試してみましたが、機能していません。FindAll()を使用できますが、2つのフィルターは関連していません。これを達成する方法についてのアイデアはありますか?

ありがとう

$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

Departmentフィルタリングのパラメータを次のように変更します。

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

によるフィルタリングがRegionすでに機能していると仮定すると、これも機能するはずです。

現在投稿されているコードは、使用しているスコープに存在しないオブジェクトにアクセスしようとしているため機能$dataしません。これは行ごとにのみ使用され、dataProviderを介して返されたオブジェクトを参照します。

$modelの属性を使用してフィルタリングする必要があります。Fr_RegionId[地域]列にあるオブジェクトの属性を使用しているので$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 に答える