Yii2:模型在使用Widget Detail VIew时返回NULL值(未设置)

时间:2015-07-02 04:34:16

标签: mysql yii2 detailview

我想问你关于使用DetailView Widget的问题。我想显示连接表中的数据,所以我修改了函数findModel($id),如下所示:

protected function findModel($id)
{
    if (($model = TPQ::findOne($id)) !== null) {
        $data = $model::findBySql("SELECT * FROM tpq, kurikulum, pengurus where tpq.kurikulum_id = kurikulum.kurikulum_id and tpq.pengurus_id = pengurus.pengurus_id and tpq_id = $id")->all();
        return $data;
    } else {
        throw new NotFoundHttpException('The requested page does not exist.');
    }
}

我在View

中使用该功能
   public function actionView($id)
    {
        return $this->render('view', [
            'model' => $this->findModel($id),
        ]);
    }

我的观点:

<?= DetailView::widget([
    'model' => $model,
    'attributes' => [
        'TPQ_ID',
        'TPQ_NAMA',
        'TPQ_ALAMAT',
        'TPQ_KOORDINAT',
        'TPQ_BERDIRI',
        'TPQ_AKTIF',
        'KURIKULUM_NAMA',
        'KURIKULUM_DETAIL:ntext',
        'KURIKULUM_AKTIF',
        'PENGURUS_NAMA',
        'PENGURUS_ALAMAT',
        'PENGURUS_NOHP',
    ],
]) ?>

表TPQ中的字段:'TPQ_ID', 'KURIKULUM_ID', 'PENGURUS_ID', 'TPQ_NAMA', 'TPQ_ALAMAT', 'TPQ_KOORDINAT', 'TPQ_BERDIRI', 'TPQ_AKTIF'

表Pengurus中的字段:'PENGURUS_ID','USER_ID','PENGURUS_NAMA','PENGURUS_ALAMAT','PENGURUS_NOHP'

表Kurikulum中的字段:'KURIKULUM_ID', 'KURIKULUM_NAMA', 'KURIKULUM_DETAIL', 'KURIKULUM_AKTIF'

没有错误,但显示“未设置”值。我怎么修理它?

1 个答案:

答案 0 :(得分:4)

您的代码存在一些问题。

1)使用英语进行命名,因为它是国际语言。想想可能支持此代码的其他开发人员,并且根本不了解这种语言。

2)最好用findBySql()方法替换ActiveQuery。如果您不使用其功能,为什么需要ActiveRecord?我在查询中没有看到任何复杂的逻辑,甚至可以使用ActiveQuery构建复杂的逻辑。

3)对于多个表,您需要指定关系或显示多个DetailView小部件。此小部件旨在与一个模型一起使用。

4)为了显示关系,您可以使用点符号或getter。

带点符号的示例:

'relation.attributeName',

getter示例:

[
    'attribute' => 'attributeName',
    'value' => $model->relation->attributeName,
],

阅读官方文档了解更多详情。