Привет,
Есть таблица БД с событиями:
Нет проблем вывести их построчно с пагинацией стандартным средством YII:
$query = Events::find()
->where(['eventActive'=> 1])
->orderBy('eventDate DESC');
$count = $query->count();
$pagination = new Pagination(['totalCount' => $count, 'forcePageParam'=> false, 'defaultPageSize'=>10]);
$eventsData = $query->offset($pagination->offset)
->limit($pagination->limit)
->all();
return $this->render('index', [
'eventsData' => $eventsData,
'pagination' => $pagination,
]);
Пример:
Событие А
Событие Б
Событие Б
Событие А
Событие Б
(во вьюхе просто цикл с показом блока)
Но мне нужно группировать события одного типа, идущие последовательно, а еще лучше - попадающие в интервал дат:
Событие А
2 события Б
Событие А
Событие Б
живой пример - отображение добавления фоток в ленте ВК и ФБ.
Как в этом случае реализовать выборку для конкретной страницы? Кроме как в два запроса (первый - получить все строки с оффсетом, вычесть строки которые будут сгруппированы, получить новый оффсет *; второй запрос с новым оффсетом) пока ничего не придумал, а может есть типовое решение?
* немного подумав, сообразил что получение нового оффсета - рекурсивное будет, т.к. его нужно пересчитывать снова в том случае, если на итерации попадут события, требующие группировки.
Поэтому уточняю вопрос: теперь ищу алгоритм и удобный способ хранения данных для организации facebook-like ленты с пагинацией \ lazy load для реализации на Yii2