如何在DetailView中显示另一个表中的数据


Yii - How To Show Data From Another Table in DetailView

我正在做一个项目。我想在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显示它时,它与上面类似的代码一起工作得很好。

我希望你能帮我解决这个问题。非常感谢。

在控制器中您刚刚定义了$alltid_q属性;

因此,当您要执行A::model()->findByPk($allt->id_a)时,这将返回null,因为$allt->id_a是空的,并且不会找到记录。

然后你试图在findByPk方法的结果上调用->optionA,但因为它是空的,所以这里没有对象。这就是为什么会出现以下错误:

尝试获取非对象的属性。

顺便说一下,在视图中执行一些DB调用是一个非常糟糕的做法。