1

問題をできるだけ明確に説明します。

私はactiveDataProviderを持っています:

$dataProvider=new CActiveDataProvider('Menu', array(
    'criteria'=>array(         
       'with' => array('roles'),
    ),
));

次に、チェックボックス付きの CGridView を使用しています。

$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'menu-grid',
    'selectableRows' => 2,
'dataProvider'=>$dataProvider,
'columns'=>array(
                   'id',
                   'title',
                   array(
                       'class'    => 'SCheckboxColumn',
                       'header'   => 'View',
                       'name'     => 'Roles[Actions][can_view]',
                       'id'       => 'roles_action_can_view',
                       'value'    => '$data->id',
                       'checkBoxHtmlOptions' =>
                                      array('checked' => $data->roles->can_view),
        ),
    ),
));

次に、メニュー モデルの関係で:

return array(
        'roles' => array(self::HAS_MANY, 'Rolesmenus', 'menu_id'),
    );

Rolesmenus モデルの関係では:

return array(
        'menu' => array(self::BELONGS_TO, 'Menu', 'menu_id'),
    );

そのため、$data->roles->can_view 変数にアクセスできません。すべての $data オブジェクトを var_dump すると、_attributes プライベート配列でこれらの属性を確認できますが、CGridView を介してアクセスできません。

何か案は??

4

3 に答える 3

0

リレーションがHAS_MANYの場合、そのリレーションを呼び出すと、そのActiveRecordの配列が返されます。CGridViewは配列を表示しないため、過去に行ったことは、配列内のすべての値を取得し、それらから文字列を作成するためのリレーションを含む関数をモデルに作成することです。たとえば、メニューモデルの例では、次のようにします。

public function rolesToString()
{
    $roles = $this->roles;
    if($roles) {
        $string = '';
        foreach($roles as $role) {
            $string .= $role->can_view . ', ';
        }
        return substr($string,0,strlen($string)-1); // substr to remove trailing comma
    }
    return null;
}

その場合、その列のCGridViewの「value」属性は次のようになります。

'value'=>'$data->rolesToString()'

HAS_MANY、with、およびCGridViewの使用に関する詳細情報はこちらにあります

于 2012-02-23T03:46:41.107 に答える
0

array('checked' => $data->roles->can_view,),

array('checked' => '$data->roles->can_view',) である必要があります。

于 2010-07-13T18:43:02.240 に答える
-1

最後のカンマをきれいにする最善の方法は.. trim(',',string) よろしく

于 2013-09-16T16:18:22.967 に答える