У меня есть 3 таблицы, категории, RSS и RSS предметов. Категория имеет список rsses под ней, и каждый rss имеет свои собственные каналы. Я пытаюсь добиться их упорядочения по дате публикации каждого элемента фида.
Чтобы быть понятным, пример:
Category: dogs > 3x RSS assigned to dogs category > each RSS has 30 feed items.
И каждый элемент канала имеет свою pub_date.
То, что я пытаюсь сделать, это использовать идентификатор категории, получить все элементы фида и упорядочить их по pub_date.
Что я пробовал:
$categoryId = Category::where('name', $category)->first()->id;
$rsses = RSS::where('category_id', $categoryId)->get();
// rsses is now a collection of each RSS arrays.
Теперь я хочу получить feedItems по заказу pub_date. Я попытался использовать forloop:
$rssItems = [];
foreach ($rsses as $rss) {
array_push($rssItems, RssFeed::where('rss_id', $rss->id)->orderBy('pub_date', 'asc')->get());
}
Это дает мне массив каждого элемента RSS-канала, упорядоченный в его собственном RSS-канале, а не полный список.
Вместо этого я хочу получить 1 массив или объект со всеми элементами фида, объединенными в этот массив и упорядоченными по pub_date. Мой метод принес мне массив массивов для каждого канала RSS, и каждый элемент канала упорядочен сам по себе, а не глобально.
Что вы можете сделать, это
$rsses = RSS::where('category_id', $categoryId)->pluck('id');
это вернет вам массив всех rsses
А потом огонь,
RssFeed::whereIn('rss_id', $rsses)->orderBy('pub_date', 'asc')->get();
Это должно дать вам объемные данные.
Попробуйте, это должно работать.
Других решений пока нет …