我有事件模型,一个事件有一个项目,一对一关联,我在事件模型中编写函数以获取项目如下
public function getprojects() {
return $this->hasOne(app\models\Project::className(), ['id' => 'projectid']);
}
以下是我的控制器的代码
if ($model->load(Yii::$app->request->post()) && $model->save()) {
$project = $model->project;
return $this->redirect(['eventdetail', 'id' => $model->id, 'project' => $project]);
}
和详细信息视图代码是
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'id',
'projectid',
'userid',
'milestone',
'datetime',
],
]) ?>
我想打印项目标题而不是projectid,我们从关联表中获取标题如何获得标题并打印详细视图
答案 0 :(得分:3)
1)如果您只需要文字值,最简单的方法就是将projectId
更改为projects.title
:
'attributes' => [
'projects.title',
],
同样标签将取自Projects
型号。
2)对于更复杂的情况和不同的格式化,您可以调用任何模型方法来检索所需的数据。
示例:
'attributes' => [
[
'attribute' => 'avatar',
'format' => 'raw',
'value' => $model->getAvatar(),
],
],
答案 1 :(得分:0)
要在DetaileView中获取关系数据,您可以使用magic methods
。
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'id',
array(
'attribute' => 'projectid',
'value' => $model->project->title,
)
'userid',
'milestone',
'datetime',
],
]) ?>
并将模型中的关系代码更改为:
首先,在namespace
添加
use app\models\Project;
其次,如果你有一对一的关系,请在camelcase getProject
中调用函数,getProjects
用于一对多关系。
public function getProject() {
return $this->hasOne(Project::className(), ['id' => 'projectid']);
}