在yii2中显示多个相关数据

时间:2015-11-09 20:17:46

标签: php yii yii2 yii-extensions yii2-advanced-app

enter image description here使用yii2创建管理系统。 我试图显示多对一关系的数据但返回错误未设置如图所示

表:

Case table
Columns: ref_no (primary key),case_description,case_raised_on

Evidence table
Columns: ref_no(foreign key), path, evidence_type

案件可以有多个证据,每个证据都属于一个案件

RELATIONSHIPS IN THE MODELS:

Case Model:

 public function getEvidences()
{
    return $this->hasMany(Evidence::className(), ['case_ref' => 'ref_no']);
}



Evidence model
public function getEvidenceType()
{
    return $this->hasOne(EvidenceType::className(), ['type' => 'evidence_type']);
}

控制器

Case controller
public function actionView($id)
{
return $this->render('view', [
        'model' => $this->findModel($id),
]);
}

在视图文件中

<?= DetailView::widget([
        'model' => $model,
        'attributes' => [
            'ref_no',
            'case_description',
            'raised_on',
            'status',
            'updated_on',
        'evidences.evidence_type',                           
        ],
    ]) ?>

视图文件返回未在(evidences.evidence_type)上设置的错误。它应显示与ref_no2引用的某个案例相关的所有证据的记录

2 个答案:

答案 0 :(得分:3)

由于Case有很多证据,你做错了。 一个选项是你必须使用,

内爆数组

尝试,,

<?php
$evidences  = \yii\helpers\ArrayHelper::getColumn((\yii\helpers\ArrayHelper::getColumn($model , 'evidences')) ,'evidence_type');
?>
<?= \yii\widgets\DetailView::widget([
    'model' => $model,
    'attributes' => [
        'ref_no',
        'case_description',
        'raised_on',
        'status',
        'updated_on',
        [
            'label' => 'Evidences',
            'value' => implode(',' ,$evidences),
        ],
        'evidences.evidence_type',
    ],
]) ?>

答案 1 :(得分:2)

因为你正在使用yii2的DetailView小部件而且它只需要一个模型。因此,如果您想从关系中获取值,则必须在属性数组中调用该关系:

[
'label' => 'Evidences',
'value' => implode(',',\yii\helpers\ArrayHelper::map($model->evidences, 'id', 'evidence_type')),
],

$model->evidences是您在Case Model

中声明的关系