【发布时间】: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 }}
提前致谢。
【问题讨论】:
标签: sql laravel laravel-5 eloquent eager-loading