2015-10-19 2 views
2

Я следовал этот код структуры для системы категорий многоуровневого на Laravel 5:Multiple Категория Вложенный запрос Laravel 5

Это прекрасно работает. Но я пытаюсь собрать запрос, чтобы возвращать сообщения в категории (по slug), а также категории детей внизу.

Так Вот что у меня есть на данный момент:

$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 и (выберите count (*) из 'categories' inner join 'category_post' в 'categories'. 'Id' = 'category_post '.'category_id' где 'category_post'. 'post_id' = 'posts'. 'id' и 'id' = '9' или 'parent_id' = '9' и 'categories'. 'deleted_at' равно 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 с и их 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 модели.

+0

Здравствуйте, я хочу получить сообщения из категорий и подкатегорий. Таким образом, концепция от dboskovic, однако, это решение возвращает все сообщения на данный момент. – user1380591

Смежные вопросы