Реализация сводной таблицы

191
01 сентября 2018, 00:20

Есть такая задача: сводная таблица состоит из данных нескольких других таблиц. Они собираются, форматируются (например было в оригинале $lastname, $firstname, $middlename - собралось в один $fullname и т.п.) и выводятся на страницу в виде таблицы. Столбцов и строк довольно много.

В предыдущем проекте когда я делал такую же задачу я использовал Dynagrid для вывода и отдельную таблицу в которую я собирал все эти данные и из нее уже выводил их. Причем в отдельной таблице хранилась дата последнего обновления таблицы и через какое-то фиксированное время происходила очистка и новое заполнение этой таблицы (ну или если тыкнули спец. кнопочку "обновить таблицу").

Но мне это решение не особо понравилось. Во первых необходимость создавать для этого отдельную таблицу, структура которой кстати иногда меняется и в которой уж очень много столбцов (больше 10). Во вторых необходимость хранить отдельным полем время обновления и вручную проверять его. К тому же данные могли поменяться, а время обновлять таблицу еще не пришло...

Подскажите как такое кэширование будет реализовать правильнее? Данных действительно довольно много (например в районе 5к строк), но выводятся они само собой через пагинацию. Чем мне понравился именно этот грид - очень гибкий в настройке (например количество выводимых строк и отображаемые столбцы). Причем настраивать его может уже юзер под себя. Но можно и другой какой-нибудь использовать - не принципиально. Главное чтобы его было несложно встроить. Например рассматривал как альтернативу JQuery DataTables.

Кажется никто не может понять что я имею ввиду, поэтому прикладываю полный код из старого проекта: SummaryTable.php, SummaryTableManager.php, index.php

Answer 1

@Ninazu нет у меня отдельного запроса на каждую строчку. Скорее уж отдельный запрос (а то и не один) на каждый столбец.

Я бы не был так категоричен. Вот пример без with

$articles = Article::find()
    //->with(['user']) //Раскомментировать вконце
    ->limit(2)
    ->all();
//Cмотрим вытащились релейшены для первой записи?
print_r(array_keys($articles[0]->getRelatedRecords()));
//Обращаемся к релейшену
$articles[0]->user->user_id;
//Перепроверим релейшены, после первого обращения
print_r(array_keys($articles[0]->getRelatedRecords()));
//Ну и если вы думаете что оно подтянуло релейшены для всех строк, то это можно проверить так
print_r(array_keys($articles[1]->getRelatedRecords()));
READ ALSO
Передача массива значений из корзины в dompdf

Передача массива значений из корзины в dompdf

Есть задача формировки ИнвойсаКогда человек из корзины может сформировать счет по клику

231
поиск по mysql дереву

поиск по mysql дереву

подскажите как найти в дереве начиная с parent_id=2 все дочерние строки, у которых parent_id нет одинаковых?

211
Сортировка ksort()

Сортировка ksort()

Задача - переназначить ключи в массиве и отсортировать массив по вновь назначенным ключамЯ новичок в php поэтому для переназначения выбрал,...

156
Как получить файлы из корня сервера?

Как получить файлы из корня сервера?

Есть indexphp расположенный по такому пути: /home/user/web/example

168