我将尽可能清楚地描述这个问题。
我有活动数据提供程序:
$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'),
);
以及在“角色”(Roles)菜单“模型”(Model)关系中:
return array(
'menu' => array(self::BELONGS_TO, 'Menu', 'menu_id'),
);
所以,我不能访问$data-〉roles-〉can_view变量,当我var_dump所有$data对象时,我可以在_attributes私有数组中看到这些属性,但我不能通过CGridView访问它们。
有什么想法吗?
3条答案
按热度按时间wj8zmpe11#
如果您有一个数组,那么您就可以使用它来创建一个新的数据库。
需要是数组('checked' =〉'$data-〉角色-〉can_view',),
x6h2sr282#
当你的关系是一个HAS_MANY,那么调用这个关系将返回一个ActiveRecord的数组。CGridView不会显示一个数组,所以我过去所做的是在包含这个关系的模型中写一个函数,以获取数组中的所有值,并从它们创建一个字符串。例如,在菜单模型中的例子中,做如下操作
则该列的CGridView的“value”属性应如下所示
有关使用HAS_MANY、with和CGridView Here的更多信息
zdwk9cvp3#
清除最后一个逗号的最好方法是.. trim(',',string)