我正在开展一个项目。我想在detailview中显示另一个表中的数据。 到目前为止,我尝试编写如下代码。
QController中的actionView:
public function actionView($id)
{
$allt=new A;
$allt->unsetAttributes();
$allt->id_q=$id;
$this->render('view',array(
'model'=>$this->loadModel($id),
'allt'=>$allt,
));
}
然后,在views / q / view.php
中查看详细信息<?php
$this->widget('bootstrap.widgets.TbDetailView',array(
'data'=>$allt,
'attributes'=>array(
'id_a', //primary key from tbl_q
'id_q', //foreign key from tbl_q
array(
'name'=>'optionA',
'label'=>'Option A',
'type'=>'raw',
'value'=>CHtml::encode(A::model()->findByPk($allt->id_a)->optionA), //this I've tried, but throws error: Trying to get property of non-object
),
'optionC',
'optionD',
'optionE',
),
)); ?>
在该示例中,我想显示optionA
,但它会抛出错误:尝试获取非对象的属性。
仅供参考,当我试图从CGridView中显示它时,它与上面的代码一起工作得很好。
我希望你能帮助我解决这个问题。非常感谢你。
答案 0 :(得分:0)
在您的控制器中,您刚刚定义了id_q
;
$allt
属性
因此,当您要执行A::model()->findByPk($allt->id_a)
时,这将返回null
,因为$allt->id_a
为空并且无法找到记录。
然后,您尝试在->optionA
方法的结果上调用findByPk
,但由于它为null,因此此处没有对象。这就是您遇到以下错误的原因:
尝试获取非对象的属性。
顺便说一句,在视图中执行某些数据库调用是一种非常糟糕的做法。