2016-05-20 30 views
0

私のアプリケーションでは、ユーザーテーブルとフォームテーブルの2つのテーブルがあります。 ユーザーテーブルは、IDを持つ一般的なユーザー情報です。フォームテーブルには、ユーザーが完了する必要があるフィールドの一覧があります。 Eager Loading Laravel 5多対多の関係

  • SENDER_ID(FK - >ユーザ)
  • receiver_id( -

    • ID
    • form_id(>形FK):多対多の関係がそうように私ユーザーフォームピボットテーブルで追跡されていますFK - >ユーザー)
    • は、ユーザーが彼/彼女が完了する必要があり、auのことを他のユーザーにフォームを送信することが

    を完了しましたserは、多くのフォームを送受信できます。したがって、フォームには多くのユーザーが関連付けられている場合があります。問題は、フォームを開き、送信者受信者の両方のユーザー情報を含む関係(2つの外部キーがあるため)を熱心に読み込もうとするときです。私はどちらか一方しかできないようです。

    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

    Form.php:私のフォームモデルはそうのように見えます

    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をに起因ユーザーをロードする方法を取得することができます。事前に

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

    感謝を。

  • 答えて

    0

    暗黙のピボットテーブルとの関係を使用することはできません。

    ただし、FormUserモデルを作成し、hasManyに従って設定し、リレーションに属し、そこから関係にアクセスすることができます。

    多分私はもう少し説明する必要があります。 FormUserには2つのbelongsTo関係(usersテーブルを指す)があり、ビューコードは次のようになります。

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