2016-08-12 4 views
0

У меня есть модель под названием Members, другая называется Awards, а другая называется Events.Laravel Many to Many Relationship 5 tables

Каждый член может иметь несколько наград более одного раза, и каждая награда может быть назначена нескольким членам, они могут быть присуждены в профиле участников или в результате события.

Моя модель член отношения:

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 извините, есть несколько способов дать награду участнику, либо непосредственно по их профилю, либо из какого-либо события. Если вознаграждение дается непосредственно в их профиле, то идентификатор события не сохраняется, но когда при назначении вознаграждения на следующем событии будет сохранен идентификатор этого события. То, что я пытаюсь сделать, - просмотреть все награды в профиле участников в цикле foreach, если одна из наград была связана с событием, тогда отобразите имя события –

ответ

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