Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Добрый день.
Есть 3 таблицы: posts, catigories, category_post.
Собственно последняя реализует связь первых двух многие-ко-многим.
В таблице catigories есть поле parent_id, то есть родительская категория.
Допустим, структура древа категорий следующая:
1
1.1
1.2
1.2.1
1.3
1.3.1
1.3.2
2
2.1
2.2
Собственно вопросы, их возникло два.
1) Как правильно найти дочерние категории, чтобы вывести публикации из них. То есть на странице категории 1.3 должны быть публикации из категорий 1.3, 1.3.1, 1.3.2, а на странице категории 1 все публикации с 1, 1.1, 1.2, 1.2.1, 1.3, 1.3.1, 1.3.2. Вот как реализовал я, знаю что не красиво и не правильно, но хоть работает.
$category = BlogCategory::where('slug', $slug)->first(); // получаю объект родительской категории
$children = BlogCategory::where('parent_id', $category->id)->get(); // нахожу дочерние категории
$categoriesId[] = $category->id; // записываю ид категорий в массив
foreach ($children as $kid) {
$children = BlogCategory::where('parent_id', $kid->id)->get(); // в каждой дочерней категории ищу её детей
$categoriesId[] = $kid->id; // записываю их ид в массив
foreach ($children as $kid) {
$children = BlogCategory::where('parent_id', $kid->id)->get();
$categoriesId[] = $kid->id; // повторяю это ещё раз, так как уровней категорий больше 3х, пробовал рекурсивно реализовать, но не получилось
foreach ($children as $kid) {
$categoriesId[] = $kid->id;
}
}
}
2) Выше приведенный код формирует массив с ид категорий, которые нужно вывести. Как сделать это? Тоже через foreach?
foreach ($categoriesId as $categoryId){
$item = BlogCategory::where('id', $categoryId)->first();
$posts[] = $item->posts;
}
Такой код возвращает массив коллекций и дальнейший вывод публикаций на сайт не очень удобен, мягко говоря.
Как можно одним запросом получить эти публикации?
Страницы 1