2015-08-06 5 views
0

У меня есть три модели прямо сейчасLaravel многие ко многим поиска отношения

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

public function languages(){ 
    return $this->belongsToMany('App\Language'); 
} 

Газета

public function languages(){ 
    return $this->belongsToMany('App\Language'); 
} 

Язык

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

public function newspapers(){ 
    return $this->belongsToMany('App\Newspaper'); 
} 

У меня уже есть таблица language_user, language_newspaper

И повозиться, я успешно восстановить как соотношение по прикреплению) блаблабла (.

Вопрос заключается в Как я мог искать Newspaper что User id1 имеет этот Language в красноречив? Для меня это кажется довольно сложным.

User id1 -> has language en, zh

Newspaper id1 -> has language en, jp -> OK

Newspaper id2 -> has language zh -> NOT OK

Я попытался это, но не уверен, что это правильно или нет

$where = [];

foreach ($agent->languages as $language) { 
array_push($where, $language->id);} 

$newspapers = Newspaper:: 
join('language_newspaper', function ($join) use ($where) { 
    $join->on('newspaper.id', '=', 
     'langauge_newspaper.newspaper_id') 
     ->whereIn('langauge_newspaper.newspaper_id', $where); 
}) 
->groupBy('newspaper.id') 
->get(); 

ответ

1

Вы должны быть в состоянии использовать whereHas в этом случае, как это:

$newspapers = Newspaper::whereHas('languages', function ($q) use ($agent) { 
       $q->whereIn('id', $agent->languages->lists('id)->all()); 
       })->get(); 
Смежные вопросы