如何在一个CGridView中显示两个模型

时间:2013-03-12 08:25:54

标签: php yii cgridview multiple-models

我有两张表,1. Students 2.SrkParents.

学生模型中的关系是,

'srkParents' => array(self::HAS_MANY, 'SrkParents', 'studentID'),

SrkParents模型中的关系是,

'student' => array(self::BELONGS_TO, 'Students', 'studentID'),

查看是,

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'students-grid',
'dataProvider'=>$dataProvider,
'filter'=>$model,
'columns'=>array('studentID','status','del',

array('name'=>'SrkParents.fathers_name',
'value'=>'$data->Students->fathers_name',
'type'=>'raw'),
array('class'=>'CButtonColumn',),),));

我不知道我错在哪里..我收到错误,如下所示,

Property "Students.Students" is not defined. 

3 个答案:

答案 0 :(得分:1)

修改后的答案:只需更改has_many

中的关系has_one即可
'srkParents' => array(self::HAS_ONE, 'SrkParents', 'studentID'),

答案 1 :(得分:0)

您的关系srkParentsHAS_MANY关系。因此,$data->srkParentsSrkParents数组,而不是对象。这是有道理的,因为你的学生有几个父母。

我对你的模型属性知之甚少,所以我只能猜测:解决这个问题的一种方法是在get模型中添加一个Students的循环{{1}找到父对象并从那里返回名称:

$this->srkParents

然后您可以在网格视图中使用public function getFatherName() { foreach($this->srkParents as $parent) if($parent->sex=='m' /* just guessing */) return $parent->name; }

答案 2 :(得分:0)

您的关系名称是学生,这是案例性的。

尝试将$data->Students->fathers_name更改为$data->student->fathers_name

未定义属性Students.Students

  

我做错了什么?

  • 您尝试从未定义的模型Students获取字段Students
相关问题