首页 文章

渴望加载Laravel 5与两个外键的多对多关系

提问于
浏览
1

在我的应用程序中,我有两个表,一个 Users 表和一个 Forms 表 . Users 表是具有id的典型用户信息, Forms 表具有用户需要完成的字段列表 . 在我的 UserForms 数据透视表中跟踪了很多关系,如下所示:

  • id

  • form_id(fk - >表格)

  • sender_id(fk - > users)

  • receiver_id(fk - > users)

  • 完成了

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

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

FormController

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

如何让它加载 User 归因于sender_id,所以我可以在我的视图中做这样的事情:

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

提前致谢 .

1 回答

  • 0

    我认为您不能使用隐式数据透视表的关系 .

    但是,您可以创建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
    

相关问题