我已经在Laravel 5上对这个代码结构采用了多级别类别系统:
这很好用。但是我试图整理一个查询来返回一个类别中的帖子(通过slug),还有下面的子类别。
所以我现在得到的是什么:
$posts = Post::with('images')->whereHas('categories', function($q) use ($slug)
{
$q->where('slug', '=', $slug);
})->orderBy('created_at', 'DESC')->paginate(10);
返回与通过的slug相匹配的类别下的所有内容,但不返回子项。有什么建议吗?
感谢。
答案 0 :(得分:1)
如果您只有一个子类别的深度,我将使用以下解决方案。
<?php
$category = Category::where('slug',$slug)->first();
$posts = Post::with('images')->whereHas('categories', function($q) use ($category)
{
$q->where(function($q) use ($category) {
$q->where('id', $category->id)->orWhere('parent_id',$category->id);
});
})->orderBy('created_at', 'DESC')->paginate(10);
答案 1 :(得分:0)
在您的代码中,您只获取了Post
及其images
。如果我理解正确,您要获取的内容是Post
s,他们的images
,category
他们的内容和childCategories
(这是一个组成名称) category
。您只需在category.childCategories
方法中添加with
,就像这样:
$posts = Post::with('images', 'categories.childCategories')->whereHas('categories', function($q) use ($slug)
{
$q->where('slug', '=', $slug);
})->orderBy('created_at', 'DESC')->paginate(10);
请务必将childCategories
名称更改为Category
模型中的子类别关系名称。