我正在做一个项目。我想在detailview中显示另一个表的数据。到目前为止,我尝试编写如下代码:
actionView in QController:
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中添加detailview
<?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显示它时,它与上面类似的代码一起工作得很好。
我希望你能帮我解决这个问题。非常感谢。在控制器中您刚刚定义了$allt
的id_q
属性;
因此,当您要执行A::model()->findByPk($allt->id_a)
时,这将返回null
,因为$allt->id_a
是空的,并且不会找到记录。
然后你试图在findByPk
方法的结果上调用->optionA
,但因为它是空的,所以这里没有对象。这就是为什么会出现以下错误:
尝试获取非对象的属性。
顺便说一下,在视图中执行一些DB调用是一个非常糟糕的做法。