2016-08-12 17 views
0

私は、メンバーと呼ばれるもう1つは賞と呼ばれ、別のものはイベントと呼ばれるモデルを持っています。Laravel多対多リレーションシップ5テーブル

各メンバーは複数回の賞を複数回取ることができ、各賞は複数のメンバーに割り当てることができます。メンバーのプロフィールやイベントの結果として獲得できます。

マイメンバーモデルの関係:

public function Awards() 
    { 
     return $this->belongsToMany('App\Award', 'award_members', 'member_id', 'award_id') 
        ->withTimestamps() 
        ->orderBy('award_members.created_at','desc'); 
    } 

マイ関係テーブル:

Schema::create('award_members', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->integer('user_id'); 
      $table->integer('club_id'); 
      $table->integer('award_id'); 
      $table->integer('member_id'); 
      $table->integer('event_id')->nullable(); 
      $table->timestamps(); 
     }); 

マイビュー出力:

@foreach($member->Awards as $a) 
    {{ $a->title }} | {{ $a->pivot->created_at }} 
@endforeach 

出力:

  • 賞1 | 12/08/2016
  • 賞2 | 12/08/2016
  • 賞1 | 11/08/2016

リレーションテーブルにイベントを介してメンバープロファイルに追加されている場合は、イベント名も出力したいと思います。上記は会員に直接追加された賞の詳細のみを示しています。私の関係テーブルで

イベントからエントリはのようになり:

  • ID = 4
  • USER_ID = 1
  • club_id = 1(に関連する(ユーザテーブルに関連する)
  • クラブテーブル)
  • award_id = 3(賞テーブルに関連する)
  • MEMBER_ID = 1(メンバー・テーブルに関連する)
  • event_id = 1(イベントテーブルに関連していますが、NULLでもかまいません)

イベント名を入力したときにどのように出力できますか?

+0

を言うでしょうが、あなたが取得したい手の込んだしてくださいだろうか? – jaysingkar

+0

私が理解している限り、あなたはリレーションテーブルに関連するすべての詳細をイベント名で取得したいと考えています。右 ? – jaysingkar

+0

@jaysingkar申し訳ありませんが、メンバーに自分のプロフィールやイベントから賞を与える方法はいくつかあります。自分のプロフィールに賞が直接与えられた場合、イベントIDは保存されませんが、次のイベントで賞が与えられると、そのイベントのIDが保存されます。私がしようとしているのは、賞の1つがイベントにリンクされていて、イベント名が –

答えて

1

私はあなたが複雑なピボットを持っていると思います。多分、それはモデルそのものである必要があります。実際にあなたがそれについて考えるなら、あなたのAwardは異なる状況で何度も得ることができる賞の一種です。ある瞬間に、あるイベントを通じて、誰かに与えられた賞は、それは別のコンセプトです。

ライブラリのシステムを開発しているとします。通常、書籍のタイトル(タイトル、著者など)のモデルと、そのそれぞれの物理コピーを表す「BookCopy」または「BookExemplar」のモデルがあります。ユーザーが本を受け取ると、実際にコピーを取っています。

だから私は

// Member.php 
public function Awards() 
{ 
    return $this->hasMany(AwardGrant::class); 
} 

// AwardGrant.php 
public function Award() 
{ 
    return $this->belongsTo(Award::class); 
} 

public function Event() 
{ 
    return $this->belongsTo(Event::class); 
} 
関連する問題