Доброго времени суток.
Изучаю Laravel. Есть задача следующего плана.
У меня есть страница с формой. Задача формы - сотавить запрос к базе данных, чтобы получить оттуда некоторый набор данных. То есть, есть 2 поля датавремя (От и До), и есть некоторое количество групп с галочками. В каждой группе должна стоять как минимум одна галочка. Как только мы нажимаем кнопку, то попадаем на другую страницу, которая выводит значения из базы данных, на основании запроса. Но строк может быть очень много, до нескольких десятков тысяч. И логисным встаёт вопрос пагинации.
Если писать не на фреймворке (конкретно этот пример), то я понимаю как это делать. Но пробую на Laravel 6.x, то тут я начинаю тупить. Данные в таблицу заносятся нормально, если нет пагинации. Если я указываю пагинацию, то соответственно выводится только первая страница с нужным количеством строк. Но при переходе на вторую страницу, или любую другую, выпадает ошибка, так как в запросе всего 1 GET-параметр 'page'.
Логика подсказывает, что надо либо кэшировать, либо куда-то сохранять сам запрос, ну а лучше всего кэшировать рультат запроса и его каким-то образом выводить с пагинацией. Но судя по документации всё должно быть проще. Либо я чего-то не вижу, либо просто не понимаю документацию. Возможно просто туплю.
Мои попытки найти ответ привели к следующему. В официальной документации очень простые примеры, из разряда вывести все статьи на страницу отсортированную по времени. Ну может ещё что-то добавлено. Но всё это не получено GET-запросом, а просто выводится переходя на какую-то определённую страницу, где просто эти данные уже есть. Великий и могучий (Google и Яндекс) тоже дают в лучшем случае ссылки на версии Laravel 5.2, 5.4, 5,8. Но и там примерно всё тоже самое. Есть отсылка к Eloquent, но тут я туплю по полной. Я понял что это работа с моделью. Но если я правильно понимаю, что это нужно чтобы настроить межтабличное взаимодействие (один к одному, один ко многим, многие ко многим). Но у меня одна таблица в которой всё находится и из неё мне нужно достать отфильтрованные данные.
Я уже 2 недели в тупике, и пока выхода не вижу. Я думаю, что с подобной задачей уже сталкивались, вряд ли я придумал что-то новое (уровень не тот). Подскажите хотя бы направление куда смотреть. Или опишите принцип. Решение постараюсь уж сам как-нибудь найти.
Ссылка на пример формы:
Пример формы
Пример запроса, который обрабатывается в модели:
Кодpublic function getData() {
$request = request()->all();
$group1 = [];
foreach($request as $key => $value) {
if(substr_count($key, 'gr1') > 0) {
$group1[] = ['gr1', '=', $value];
}
}
$group2 = [];
foreach($request as $key => $value) {
if(substr_count($key, 'gr2') > 0) {
$group2[] = ['gr2', '=', $value];
}
}
$group3 = [];
foreach($request as $key => $value) {
if(substr_count($key, 'gr3') > 0) {
$group3[] = ['gr3', '=', $value];
}
}
$data = DB::table('table_name')
->where([
['datetime', '>=', $request['datetimeFrom']],
['datetime', '<=', $request['datetimeTo']],
]);
$data = $data->where(function ($query) use ($group1) {
foreach($group1 as $item) {
$query->orWhere($item[0], $item[1], $item[2]);
}
});
$data = $data->where(function ($query) use ($group1) {
foreach($group2 as $item) {
$query->orWhere($item[0], $item[1], $item[2]);
}
});
$data = $data->where(function ($query) use ($group1) {
foreach($group2 as $item) {
$query->orWhere($item[0], $item[1], $item[2]);
}
});
}
Прошу заранее прощения за столь длинный вопрос, но всё же надеюсь на поддержку и адекватную помощь.
Надеюсь я ясно донёс свою мысль. Если нет, то готов к конструктивному общению.