yii2如何使用外键获取关系并获取id的标题

时间:2015-03-11 11:13:11

标签: activerecord yii

我有事件模型,一个事件有一个项目,一对一关联,我在事件模型中编写函数以获取项目如下

 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,我们从关联表中获取标题如何获得标题并打印详细视图

2 个答案:

答案 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']);
}