2015-10-19 79 views
2

我遵循此代碼結構在Laravel 5上的多級別類別系統:多類別嵌套查詢Laravel 5

這工作正常。但我試圖把一個查詢返回到一個類別(通過slu)),但也下面的兒童類別的職位。

因此,繼承人什麼我此刻有:

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

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

這是通過的塞相匹配的類別下返回的一切,而不是孩子。有什麼建議麼?

謝謝。

+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); 
+0

我認爲這很接近,邏輯似乎是正確的,但它似乎是返回所有帖子。這是生成的查詢:'select * from'posts'其中'posts','deleted_at'爲null,並且(從'categories'內部連接'category_post'中選擇count(*)''category'。'id'='category_post '.'category_id'where'category_post'。'post_id'='posts'。'id'and'id'='9'or'parent_id'='9'and'categories'。'deleted_at'is null)> = 1 order by'created_at'desc limit 10 offset 0' - 然而我認爲需要圍繞id和parent_id ...這樣('id' ='9'或'parent_id' ='9')。有任何想法嗎? – user1380591

+0

由於它正在使用連接,因此會略微混淆查詢。我編輯了我的答案,以正確地分組條件,以避免與OR運算符進行無分組比較。 –

+0

圖例。謝謝。這工作。 – user1380591

0

在你的代碼,你只取了Post S和他們的images。如果我理解正確,你想獲取的是Post,他們的images,category他們和childCategories(這是一個組成名稱)的那個category。你只需要在你的with方法中添加category.childCategories像這樣:

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

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

記住你Category模型childCategories名稱更改爲任何孩子種類對應的名字。

+0

您好,我想從類別和子類別中檢索帖子。因此,從dboskovic的概念,該解決方案現在返回所有帖子。 – user1380591