渴望加载 Laravel 5 与两个外键的多对多关系
Posted
技术标签:
【中文标题】渴望加载 Laravel 5 与两个外键的多对多关系【英文标题】:Eager Loading Laravel 5 many-to-many relationship with two foreign keys 【发布时间】: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_id 的 User,所以我可以在我看来做这样的事情:
$receiver->pivot->sender->full_name
提前致谢。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于渴望加载 Laravel 5 与两个外键的多对多关系的主要内容,如果未能解决你的问题,请参考以下文章