Yii 使用与CGridView的关系
我会尽可能清楚地描述这个问题 我有activeDataProvider:Yii 使用与CGridView的关系,yii,Yii,我会尽可能清楚地描述这个问题 我有activeDataProvider: $dataProvider=new CActiveDataProvider('Menu', array( 'criteria'=>array( 'with' => array('roles'), ), )); 然后我将使用带有复选框的CGridView: $this->widget('zii.widgets.grid.CGridView', array(
$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'),
);
return array(
'menu' => array(self::BELONGS_TO, 'Menu', 'menu_id'),
);
在Rolesmenus模型关系中:
return array(
'roles' => array(self::HAS_MANY, 'Rolesmenus', 'menu_id'),
);
return array(
'menu' => array(self::BELONGS_TO, 'Menu', 'menu_id'),
);
所以,我不能访问$data->roles->can_view变量,当我变量转储所有$data对象时,我可以在_attributes私有数组中看到这些属性,但我不能通过CGridView访问它们
有什么想法吗?数组('checked'=>$data->roles->can_view,)
需要
数组('checked'=>'$data->roles->can_view',),当您的关系是一个HAS\u 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;
}
'value'=>'$data->rolesToString()'
然后该列的CGridView的“value”属性应该如下所示
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;
}
'value'=>'$data->rolesToString()'
还有关于使用HAS_MANY、with和CGridView的更多信息清除最后一个逗号的最佳方法是。。 修剪(“,”字符串) 问候