多个类别嵌套查询Laravel 5

时间:2015-10-19 21:33:18

标签: laravel laravel-5 eloquent

我已经在Laravel 5上对这个代码结构采用了多级别类别系统:

这很好用。但是我试图整理一个查询来返回一个类别中的帖子(通过slug),还有下面的子类别。

所以我现在得到的是什么:

    $posts = Post::with('images')->whereHas('categories', function($q) use ($slug)
    {
        $q->where('slug', '=', $slug);

    })->orderBy('created_at', 'DESC')->paginate(10);

返回与通过的slug相匹配的类别下的所有内容,但不返回子项。有什么建议吗?

感谢。

2 个答案:

答案 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,他们的imagescategory他们的内容和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模型中的子类别关系名称。