2015-09-15 37 views
0

我使用Laravel 5.1,并具有这四个数据库表查询数据透视表通过关系

posts包含来自Facebook的职位。 posts表有一个外键page_id。这是一个表,其中包含所有的Facebook页面

pages表。

category表包含我项目中类别的数据,例如funnyvideos

category_page是一个透视表既节约category_idpage_id


我现在想要做的,是让所有的职位,已发表一个页面一个特定的类别。

所以,让我们假设我有

三页

1:梅苏特·厄齐尔
2:多特蒙德
3:BMW

前两页是sports类别和最后一个cars 。现在我想要获取sport类别的网页发布的每篇文章。

我已经定义的关系,船舶

类页:

public function categories() 
{ 
    return $this->belongsToMany(Category::class); 
} 

类属:

public function pages() 
{ 
    return $this->belongsToMany(Page::class); 
} 

现在,我得到我的帖子

$topPosts = (new Post)->where('fb_created_time', '>', Carbon::today()->toDateTimeString()) 
    ->visible() 
    ->orderBy('total_count', 'desc'); 

现在我想补充只筛选特定类别页面中的帖子。我设法从这个代码在这里的特定类别的页面

$pages = Page::with('categories') 
    ->whereHas('categories', function ($query){ 
     return $query->where('category_id', 1); 
    })->get(); 

但是,我会如何链接到帖子?或者它使用whereHas甚至更​​好?这里最好的做法是什么?

+0

尝试'(页面::与('职位') - >('类')....“ – mdamia

回答

1

如果我的理解正确,您想通过网页获取帖子,属于特定类别的内容。

在这种情况下你的设置是好的,就可以通过关系进行查询:

$category_id = 2; 
Post::whereHas('page.categories', function($q) use($category_id) { 
    $q->where('categories.id', $category_id); 
})->get(); 

在邮政类:

public function page() 
{ 
    return $this->belongsTo(Page::class); 
} 

它将使一个嵌套查询。

+0

谢谢。已经在我的Postclass中有关系。我已经非常流利地使用口头禅了,但是当谈到多种口味时,我有点卡住了! – Musterknabe