簡體   English   中英

與Laravel到同一張桌子的兩個關系

[英]Two relations to same table with Laravel

我有下表:

**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

因此,我更改了關系surveys(),以獲取具有所需數據的所有項目調查:

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

如果我放棄了$ survey,我會得到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 }} 

未定義的屬性:Illuminate \\ Database \\ Eloquent \\ Relations \\ BelongsTo :: $ number

您應該訪問關系以加載特定的ScheduledUser

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


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

最終的解決方案是使用->with('<relation>')來獲取@kerbholz建議的相關數據,並在刀片模板中顯示數據,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM