Объединить вывод из базы и xlm

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
YaOleg
Сообщения: 5
Зарегистрирован: 2020.05.12, 10:46

Объединить вывод из базы и xlm

Сообщение YaOleg »

Здравствуйте.

Вкратце. Есть таблица в базе с новостями и есть xml фид с другими новостями. Необходимо сделать страницу со списком новостей отсортированных по дате содержащую новости как из базы так и из xml. Примечание. Загружать новости из xml в базу нет желания, названия полей в базе и в xml различны.

Как вывести список новостей из базы знаю, как достать данные из xml и тоже их вывести тоже знаю. А вот как вывести и то и другое на одной странице причем отсортировано и с разными названиями полей пока не особо понимаю.

Как я вижу решение, но на мой взгляд оно кривое:
1. Делаю модели newsdb и newsxml (соответственно первая на базу, а во второй загружаю xml)
2. Делаю контроллер в котором получаю список новостей из newsdb и newsxml. Создаю массив и копирую туда новости из обоих моделей. Сортирую массив.
3. Отдаю общий массив на вьюс.

Может кто подскажет красивое решение?
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Объединить вывод из базы и xlm

Сообщение unknownby »

В принципе сделал бы так же, но только без создания второй модели. Если у тебя есть файл xml, то подгружай его сразу в модель с новостями, соединяешь всё в массив и сортируешь по дате. Как ты и написал. Просто в контроллере вызываешь один метод из твоей модели новостей. Вся логика будет в одной модели. Это вариант если больше нигде не используется xml файл с новостями как отдельная сущность. Хотя и это можно сделать в той же модели с новостями, передавая идентификатор новости в массиве. Если type=1, то из твоей модели, если type=2, то из xml.
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

Re: Объединить вывод из базы и xlm

Сообщение skynin »

если рассуждать академически, то

Раз нечто должно обрабатываться единообразно, в данном случае для вывода данных - то должна быть одна абстракция для этого.
Значит, надо создать абстракцию "Новость" которая скрывает детали новостей получаемых из бд и xml
Под нее придется написать и провайдер данных

Поэтому, на практике, возможно, прохождение по двум массивам реальных новостей, с кучкой if'ов будет дешевле в реализации, хоть и не "красиво":
Сортируем каждый массив, и бежим по ним, сравнивая даты, или еще по какому признаку, с какого массива сейчас выводить (и прокрутить его дальше)
а в коде if тип новости else другой

опять же, этот цикл обхода можно упаковать в коллекцию, с нормальным итератором, но которая выдает когда то одного типа новость, то другого
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
YaOleg
Сообщения: 5
Зарегистрирован: 2020.05.12, 10:46

Re: Объединить вывод из базы и xlm

Сообщение YaOleg »

Спасибо. Думал есть какое нибудь изящное либо встроенное решение.
Ответить