Laravel

时间:2018-01-15 13:31:09

标签: php laravel eloquent blade

我有下表:

**Project_Survey**
id
survey_id
<many_other_fields>
scheduled_user
completed_by

可以安排调查并将其分配给用户,但由其他人完成。这两个字段都是用户表

的FK

project_survey模型中的关系:

public function user()
{
    return $this->belongsTo('App\User', 'completed_by');
}

public function scheduledUser()
{
    return $this->belongsTo('App\User', 'scheduled_user');
}

如何在表格中显示两个用户?当我做的时候

{{ $survey->firstname }}

它返回completed_by用户的名字,那么如何获得预定用户? 这似乎不起作用:

{{ $survey->scheduledUser->firstname }}

更新 我在这里弄错了:

public function surveys()
{
    return $this
        ->belongsToMany('App\Survey', 'project_survey')
        ->withPivot('id')
        ->leftJoin('user', 'project_survey.completed_by', '=', 'user.id')
        ->select('survey.*', 'project_survey.*', 'user.firstname', 'user.lastname');
}

在这里,我获得了与该项目相关的所有调查。

更新2

所以我改变了关系调查()以获得项目的所有调查所需的数据:

public function surveys()
{
    return $this
        ->hasMany('App\Project_Survey', 'project_id')
        ->with('survey')
        ->with('scheduledUser')
        ->with('user');
}

如果我对$调查进行转储,我会得到3个关系,到目前为止一直很好:

Project_survey {#961 ▼

#table: "project_survey"
#fillable: array:10 [▶]
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []

#attributes: array:15 [▶]
#original: array:15 [▶]

#relations: array:3 [▼
"survey" => Survey {#1015 ▶}
"scheduledUser" => null
"user" => User {#1111 ▶}
]

但是如果我试图显示关系中的数据,我仍然会收到错误:

  {{ $survey->survey()->number }} 
  

未定义的属性:   照亮\数据库\雄辩\关系\属于关联:: $号

2 个答案:

答案 0 :(得分:1)

您应该访问该关系以加载该特定的scheduledUser

{{ $survey->scheduledUser()->firstname }}


@foreach($survey as $sur)
  {{ $sur->scheduledUser()->firstName }}
@endforeach

答案 1 :(得分:0)

最终解决方案是使用->with('<relation>')获取@kerbholz建议的相关数据,并在刀片模板中显示数据如下:

{{ $survey->survey->number }}