2015-08-03 5 views
1

У меня есть 3 моделиLaravel HasManyThrough не работает в этой ситуации, как это сделать?

Пользователь

  • ID

Событие

  • ID
  • end_time

EventUser (это представляет пользователя, который присоединился к событию с комментарием)

  • user_id
  • event_id
  • комментарий

Мы хотим сделать $user->events (перечислить информацию о событии для всех события пользователя присоединились)

Но, как вы можете видеть, промежуточная таблица представляет собой сводную таблицу ... поэтому таблица событий не делает t ссылается на него (что является четвертым параметром функции hasManyThrough).

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

Сейчас я делаю это в модели пользователя

private function eventQuery() { 
    return Event::join('event_user', 'events.id', '=', 'event_user.event_id') 
     ->where('user_id', $this->id); // event_user.user_id 
} 

public function events() { 
    return $this->eventQuery()->get(); 
} 

public function pastEvents() { 
    return $this->eventQuery() 
     ->where('end_time', '<', new \DateTime()) // events.end_time 
     ->get(); 
} 

Но есть Laravel способ сделать это, как hasManyThrough в этой ситуации?

ответ

0

Laravel путь:

пользователя Модель:

public function events() 
{ 
return $this->belongsToMany('App\Event')->withPivot('comment'); 
} 

Модель событий:

public function users() 
{ 
return $this->belongsToMany('App\User')->withPivot('comment'); 
} 

Когда вы делаете вызов:

$user = App\User::whereId($id)->where('end_time','<=',$now)->with('events')->get(); 

событиях, соотношение будут получены с помощью co как вы хотите, чтобы он был.

Смежные вопросы