我正在使用Laravel 5.1并拥有这四个数据库表
posts
包含来自Facebook的帖子。 posts
表有一个外键page_id
。这是
pages
表,其中包含所有Facebook页面。
category
表包含项目中类别的数据,例如funny
,videos
等
category_page
是一个数据透视表,用于保存category_id
和page_id
我现在想要做的是获取所有帖子,这些帖子已由特定类别的页面发布。
所以,我们假设我有三页
1:Mesut Oezil
2:Borussia Dortmund
3:宝马
前两页属于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 :(得分:1)
如果我理解正确,您希望通过网页获取帖子,属于特定类别的内容。
在这种情况下,您的设置很好,您可以通过关系进行查询:
$category_id = 2;
Post::whereHas('page.categories', function($q) use($category_id) {
$q->where('categories.id', $category_id);
})->get();
在你的Post课程中:
public function page()
{
return $this->belongsTo(Page::class);
}
它将进行一次嵌套查询。