Задать вопрос
root09
@root09

Laravel подсчет новостей в выбранной категории (включая подкатегории)?

Здравствуйте, ни как не могу понять, как через ORM реализовать получение количества объявлений в выбранной категории (включая подкатегории):
Есть категории и подкатегории, например:
Авто
-bwm
-audi
Мото
-irbis
-polaris
есть таблица posts с объявлениями
так же есть таблица posts_categories
вида:
post_id | categories_id
ну и таблица с категориями categories
id | name | parent

подскажите пожалуйста как через ORM реализовать получение количества объявлений в выбранной категории (включая подкатегории)? например получить количество объявлений в категории Авто (посчитать число объявлений из подкатегории bwm и audi)

У меня есть только идея сначала получить список всех подкатегорий например так:
$categories = Categories::where('parent', '=', $id)->get();

А затем через цикл посчитать количество новостей в каждой категории, но ведь это не совсем правильно?

т.е если это сделать просто на MYSQL запросах, то должно быть что то вида:

SELECT * FROM categories WHERE parent = '1'; // получаем список дочерних категорий (например получили id 2,3,4)
далее
считаем сколько постов у дочерних элементов, например:
SELECT COUNT(*) FROM post_categories WHERE categories_id = 2;
SELECT COUNT(*) FROM post_categories WHERE categories_id = 3;
SELECT COUNT(*) FROM post_categories WHERE categories_id = 4;

и нужно сложить результат этих 3 запросов
  • Вопрос задан
  • 1866 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Java-разработчик
    8 месяцев
    Далее
  • Shultais Education
    Основы SQL
    3 месяца
    Далее
  • OTUS
    PHP Developer. Professional
    5 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
@eskrano
Мне кажется что можно сделать Categories hasOne() к родительской категории и через жадную загрузку подсчитать как вариант. Или я не правильно понял суть вопроса
Ответ написан
Комментировать
Tesla
@Tesla
Похоже, вы просто не знаете, что в SQL кроме оператора '=' есть еще оператор 'IN'. Это чтобы 3 запроса в один объединить :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы