在 yii2 中显示多个相关数据
displaying multi related data in yii2
我正在使用 yii2 创建一个管理系统。
我正在尝试显示多对一关系的数据,但 returns 未按所示设置的错误
表:
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',
],
]) ?>
查看文件returns没有在(evidences.evidence_type)上设置的错误。它应该显示[=28=引用的与某个案件相关的所有证据的记录。 ]
你做错了,因为案件有很多证据..
一种选择是您必须使用 ,
内爆数组
尝试,
<?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',
],
]) ?>
因为你使用的是 DetailView yii2 的 Widget,它只需要一个模型。因此,如果您想从关系中获取值,则必须在属性数组中调用该关系:
[
'label' => 'Evidences',
'value' => implode(',',\yii\helpers\ArrayHelper::map($model->evidences, 'id', 'evidence_type')),
],
$model->evidences
是您在 Case Model
中声明的关系
表:
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',
],
]) ?>
查看文件returns没有在(evidences.evidence_type)上设置的错误。它应该显示[=28=引用的与某个案件相关的所有证据的记录。 ]
你做错了,因为案件有很多证据..
一种选择是您必须使用 ,
尝试,
<?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',
],
]) ?>
因为你使用的是 DetailView yii2 的 Widget,它只需要一个模型。因此,如果您想从关系中获取值,则必须在属性数组中调用该关系:
[
'label' => 'Evidences',
'value' => implode(',',\yii\helpers\ArrayHelper::map($model->evidences, 'id', 'evidence_type')),
],
$model->evidences
是您在 Case Model