2015-09-17 5 views
1

У меня есть модель для многих отношение подобный. Я хочу рассказать Штат и Категория через поворотную таблицу CategoryNews.Laravel 5.1 hasManyThrough Pivot table

Категория модель

class Category extends Model 
{ 
    public function news() { 

     return $this->belongsToMany('App\News'); 

    } 
} 

Новости модели

class News extends Model 
    { 
     public function categories() 
     { 
      return $this->belongsToMany('App\Category'); 
     } 
     public function state() 
     { 
      return $this->belongsTo('App\State'); 
     } 
} 

и Государственная модель

class State extends Model 
{ 
    public function news() { 

     return $this->hasMany('App\News'); 

    } 
} 

Я хочу, чтобы выбрать новости, связанные с состоянием, где cat_type = 2 (из категории таблица) i попытался

$slide_news = State::whereHas('news.categories',function($query){ $query->where('categories.cat_type',2);}) 

        ->with(array('news'=>function($query){ 
        $query->orderBy('created_at', 'desc');} 
        ))->where('id',$id)->first(); 

, но фильтр cat_type не работает. Я также пробовал hasManyThrough, но я не знаю, как его реализовать с помощью сводной таблицы . Пожалуйста, помогите

ответ

1

Посмотрите на here.

В настоящий момент Laravel 5.3 не поддерживает hasToManyThrogh с использованием сводной таблицы. Просто используйте альтернативные способы.

В качестве альтернативного способа:
Просто рассмотрим эти модели и их отношения:

A <=> B with pivot table A_B 
B <=> C with pivot table B_C 

Теперь вы можете создать сводную VIEW вызова A_C а:

SELECT A_id, C_id FROM A_B 
INNER JOIN B_C on A_B.B_id = B_C.B_id 
GROUP BY A_id, C_id 

Я думаю, вы можете угадать мой трюк.
Да, забудьте о hasManyThough. Теперь вы можете использовать A.belongsToMany (C).
Только не забудьте отметить как принятый ответ :))