【问题标题】:Two relations to same table with Laravel与 Laravel 的同一张表的两个关系
【发布时间】:2018-01-15 13:31:08
【问题描述】:

我有下表:

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

可以安排调查并将其分配给用户,但由其他人完成。这两个字段都是表 User 的 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');
}

如果我对 $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

【问题讨论】:

  • 您如何获取调查数据?你在使用-&gt;with('scheduledUser'); 吗?
  • 请显示dd($survey)的结果
  • {{ $survey->user->firstname }} 和 {{ $survey->scheduledUser->firstname }}
  • 见下面的评论; stackoverflow.com/questions/48264027/…我觉得我的关系有问题

标签: php laravel eloquent blade


【解决方案1】:

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

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


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

【讨论】:

  • 也试过了,但它返回了; Call to undefined method Illuminate\Database\Query\Builder::scheduledUser()
  • 好吧,因为 $survey 还没有从数据库中提取出来。所以告诉我 $suervey 它应该是 smth $survey->first()->scheduledUser()->firstname 才能工作。
  • 这是在项目页面上,其中包含所有链接调查的表格。因此,在项目模型中,我必须遵循以下关系才能获得调查:public function surveys() { return $this -&gt;belongsToMany('App\Survey', 'project_survey') -&gt;withPivot('id') -&gt;leftJoin('user', 'project_survey.completed_by', '=', 'user.id') -&gt;select('survey.*', 'project_survey.*', 'user.firstname', 'user.lastname'); } ,这是我的问题。用户名.....
  • @LazyAdmin 看起来您将返回许多调查,因此请确保您迭代它们并像上面一样打印名字
【解决方案2】:

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

{{ $survey-&gt;survey-&gt;number }}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 2018-06-13
    相关资源
    最近更新 更多