关系:
public function relations() {
return array(
'submissionStatus' => array(self::HAS_ONE, 'SubmissionStatus', 'submission_status_id'),
);
}
GridView中的列值:
'value' => '$data->submissionStatus->submission_status_name',
SubmissionStatus模型属性:
public function attributeLabels() {
return array(
'submission_status_id' => 'Status ID',
'submission_status_name' => 'Status Name',
);
}
SubmissionStatus Relations:
public function relations() {
return array(
'submissionStatus' => array( self::BELONGS_TO, 'Submission', 'submission_status_id' ),
);
}
然而我收到了一个错误:
尝试获取非对象的属性
为什么我不能通过这种关系检索submission_status_name
?
修改
另一方面,这完美地运作:
'submissionStatus' => array(self::BELONGS_TO, 'SubmissionStatus', 'submission_status')
数据库:
| tbl_submission |
-----------------------------------
| submission_id (int) PK |
| submission_name (varchar) |
| submission_status_id (int) FK |
| tbl_submission_status |
------------------------------------
| submission_status_id (int) PK |
| submission_status_name (varchar) |
答案 0 :(得分:0)
如果关系字段的值为null,那么您的关系将不会返回Foreign模型的对象;因此调用其中的属性将给出错误 尝试改变
'value' => '$data->submissionStatus->submission_status_name',
到
'value' => '(isset($data->submissionStatus))?
$data->submissionStatus->submission_status_name:""',
答案 1 :(得分:0)
这里有两个问题。
我认为你在实现中有错误。 BELONGS_TO和HAS_ONE之间的区别在于,它试图以不同的方式创建实现。你可以发布你的数据库表,他们有什么字段,我们需要看看关键和外国jey字段是什么。
我猜在一个表中是id
,在另一个表中是submission_status_id
。
尝试在这两个中的一个中改变你的关系(尝试其中一个有效):
1
'submissionStatus' => array(self::HAS_ONE, 'SubmissionStatus', array('submission_status_id'=>'id'),
'submissionStatus' => array(self::HAS_ONE, 'SubmissionStatus', array('id'=>''),
2
在您的网格中,您使用的代码是正确的,但正如@Manquer的注释中所述,如果关系返回null,它将无效。
但你可以在GridViiew中尝试更多Yii样式,如下所示:
不要仅提供任何value
name
'name'=>'>submissionStatus.submission_status_name'