Есть такая задача: сводная таблица состоит из данных нескольких других таблиц. Они собираются, форматируются (например было в оригинале $lastname, $firstname, $middlename - собралось в один $fullname и т.п.) и выводятся на страницу в виде таблицы. Столбцов и строк довольно много.
В предыдущем проекте когда я делал такую же задачу я использовал Dynagrid для вывода и отдельную таблицу в которую я собирал все эти данные и из нее уже выводил их. Причем в отдельной таблице хранилась дата последнего обновления таблицы и через какое-то фиксированное время происходила очистка и новое заполнение этой таблицы (ну или если тыкнули спец. кнопочку "обновить таблицу").
Но мне это решение не особо понравилось. Во первых необходимость создавать для этого отдельную таблицу, структура которой кстати иногда меняется и в которой уж очень много столбцов (больше 10). Во вторых необходимость хранить отдельным полем время обновления и вручную проверять его. К тому же данные могли поменяться, а время обновлять таблицу еще не пришло...
Подскажите как такое кэширование будет реализовать правильнее? Данных действительно довольно много (например в районе 5к строк), но выводятся они само собой через пагинацию. Чем мне понравился именно этот грид - очень гибкий в настройке (например количество выводимых строк и отображаемые столбцы). Причем настраивать его может уже юзер под себя. Но можно и другой какой-нибудь использовать - не принципиально. Главное чтобы его было несложно встроить. Например рассматривал как альтернативу JQuery DataTables.
Кажется никто не может понять что я имею ввиду, поэтому прикладываю полный код из старого проекта: SummaryTable.php, SummaryTableManager.php, index.php
@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()));
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости