【问题标题】:Eager Loading Laravel 5 many-to-many relationship with two foreign keys渴望加载 Laravel 5 与两个外键的多对多关系
【发布时间】:2016-09-18 06:28:55
【问题描述】:

在我的应用程序中,我有两个表,一个 Users 表和一个 Forms 表。 Users 表是带有 id 的典型用户信息,Forms 表包含用户需要填写的字段列表。在我的 UserForms 数据透视表中跟踪多对多关系,如下所示:

  • 身份证
  • form_id(fk -> 表单)
  • sender_id(fk -> 用户)
  • receiver_id(fk -> 用户)
  • 已完成

一个用户可以向另一个用户发送他/她需要填写的表单,并且一个用户可以发送和接收许多表单。因此,一个表单可能有许多与之关联的用户。问题是当我打开一个表单并尝试加载包含发送者 接收者的用户信息的关系时(因为有两个外键)。看来我只能做一个或另一个。我的表单模型如下所示:

Form.php

class Form extends Model
{
    public function senders() {
        return $this->belongsToMany('App\User', 'user_forms', 'form_id', 'sender_id')->withPivot('receiver_id', 'completed');
    }

    public function receivers() {
        return $this->belongsToMany('App\User', 'user_forms', 'form_id', 'receiver_id')->withPivot('sender_id', 'completed');
    }
}

表单控制器

public function show( $id )
{
    $form = Form::with('receivers')->findOrFail($id);  
    return view('form.show', ['form' => $form]);
}

view.blade.php

@foreach( $form->receivers as $receiver )
    <tr>
        <td>{{ $receiver->full_name }} </td>
        <td>{{ $receiver->pivot->sender_id }} </td>
    </tr>
@endforeach

我怎样才能让它加载归因于 sender_idUser,所以我可以在我看来做这样的事情:

{{ $receiver->pivot->sender->full_name }}

提前致谢。

【问题讨论】:

    标签: sql laravel laravel-5 eloquent eager-loading


    【解决方案1】:

    我认为您不能将关系与隐式数据透视表一起使用。

    但是,您可以创建一个 FormUser 模型,设置相应的 hasMany 和属于关系,然后从那里访问关系。

    也许我应该再解释一下。 您的 FormUser 将有两个 belongsTo 关系(都指向 users 表),您的视图代码如下所示:

    @foreach( $form->formusers as $relation )
        <tr>
            <td>{{ $relation->receiver->full_name }} </td>
            <td>{{ $relation->sender->full_name }} </td>
        </tr>
    @endforeach
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-04
      • 2015-05-16
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      • 1970-01-01
      • 2016-05-31
      相关资源
      最近更新 更多