У меня довольно простая структура базы данных, которая, за исключением некоторых самостоятельных ссылок и промежуточных отношений, сводится к концепции продуктов к категории.Нужен совет по иерархической разбивке данных
Окончательная структура данных я получить с помощью ResultClass::HashRefInflator после некоторых преобразований выглядит следующим образом:
my $data = $self->db->resultset('Category')->with_translation($lang)->with_categories->with_products->display_flattened;
[
[0] {
parent_name "Parent Category",
id 3,
name "First Child category",
parent_id 1,
position 1,
products [
[0] {
name "Product One",
},
...
],
}
...
]
Дела шли хорошо до тех пор, в попытке уменьшить исходный размер индекса продуктов страницы, я решил осуществить infinite scroll функцию там. Так что в общем, это вопрос с разбивкой по страницам. Вещь, с которой я сталкиваюсь, связана с тем, что я могу применять пейджинг только по категории или продукту, а не по целостной иерархии для получения части данных, которую я хочу для следующего экрана.
Например, если я хочу 20 элементов на экран (элемент может быть категорией или продуктом), и я применяю -> страницу (1) на Схеме :: ResultSet :: Категория, она будет содержать 20 категорий со всеми продуктами в них вместо 1 категории с 19 связанными продуктами и так далее.
Единственный вариант, который приходит мне на ум в настоящий момент, заключается в хранении всей структуры данных в виде одномерного массива в каком-то хранилище в памяти, таком как Redis или memcached, и нарезать его по назначению, но я знаю, что это неправильно.
Да, я пробовал это, но это ограничивает количество строк категории. Кстати, вот что такое Schema :: ResultSet :: Category-> with_products выглядит так: 'sub with_products { my ($ self, $ lang) = @_; $ self-> Поиск ( { 'product_i18ns.language_code' => $ Ланг, }, { предвыборки => { 'продукты' => '' product_i18ns }, order_by => {-asc => 'products.art_no'}, }, ); } ' – romel