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 变量,当我 var_dump 所有 $data 对象时,我可以在 _attributes 私有数组中看到这些属性,但我无法通过 CGridView 访问它们。

有任何想法吗??

4

3 回答 3

0

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

需要数组('checked' => '$data->roles->can_view',),

于 2010-07-13T18:43:02.240 回答
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'=>'$data->rolesToString()'

这里有更多关于使用 HAS_MANY、with 和 CGridView 的信息

于 2012-02-23T03:46:41.107 回答
-1

清除最后一个逗号的最佳方法是.. trim(',',string) 问候

于 2013-09-16T16:18:22.967 回答