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

时间:2014-08-05 13:52:43

标签: php yii

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

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

1 个答案:

答案 0 :(得分:0)

在您的控制器中,您刚刚定义了id_q;

$allt属性

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

然后,您尝试在->optionA方法的结果上调用findByPk,但由于它为null,因此此处没有对象。这就是您遇到以下错误的原因:

  

尝试获取非对象的属性。

顺便说一句,在视图中执行某些数据库调用是一种非常糟糕的做法。