我有2张桌子/型号:
Tmp1
TMP2
我正在尝试显示列:标题,QuestionText,部分,OutOf
在单个CGRIDVIEW中。
在Tmp1模型中:
public function relations()
{
return array(
'tmp2s' => array(self::HAS_MANY, 'Tmp2', 'Header'),
);
}
在Tmp2模型中:
public function relations()
{
return array(
'header' => array(self::BELONGS_TO, 'Tmp1', 'Header'),
);
}
控制器:
public function actionReviewAll()
{
$tmp1 = new Tmp1('search');
$tmp1->unsetAttributes();
if(isset($_GET['Tmp1'])){
$model->attributes=$_GET['Tmp1'];
}
$this->render('ReviewAll',array(
'tmp1'=>$tmp1,
));
}
查看:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'tmp-grid',
'dataProvider'=>$tmp1->search(),
'filter'=>$tmp1,
'columns'=>array(
'Header',
'QuestionText',
array(
'name' => 'tmp2.OutOf',
'value' => '$data->tmp2[0].OutOf',
'type' => 'raw'
),
),
)); ?>
错误:
未定义属性“Tmp1.tmp2”。
非常感谢任何帮助
答案 0 :(得分:0)
你的代码可能有效(我还没有尝试过),但是在你的tmp1模型没有tmp2的情况下却没有。在访问之前,您必须确保有tmp2:
'value' => 'isset($data->tmp2) ? $data->tmp2[0].OutOf : Null',
您还可以将一个函数($ data,$ row)传递给value,使其看起来不那么混乱。 (是的,这对我很重要。)
答案 1 :(得分:0)
你有一个sintax错误:
Tmp1.tmp2 = Tmp1.tmp2s
关系别名是's'。 “tmp2s”。
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'tmp-grid',
'dataProvider'=>$tmp1->search(),
'filter'=>$tmp1,
'columns'=>array(
'Header',
'QuestionText',
'tmp2s.Part',
'tmp2s.OutOf',
),
)); ?>
但是你试图显示'self :: HAS_MANY'关系,你无法在普通的CGridView小部件上显示...