dima9595
@dima9595
Junior PHP

Ленивая нетерпеливая загрузка и пагинация, как использовать всё вместе?

Есть некий код, который через "нетерпеливую загрузку" подгруюжаю 2 таблицы из бд...кароче, не смогу объяснить толком, так что покажу код:

Общая модель для подгрузки всех данных:
$game = Games::getGame($gameName);

		if($game){
			$game->load('getNewsGame');
		}

		return $game;


Модель новостей:
/* Получение новостей игры (upd) */
	public function getNewsGame(){
		return $this->hasOne(News::class, 'game_news', 'id_games');
	}


Модель самой игры:
/* Получение данных об игре */
	public function getGame($gameName){
		$getCollectionGames = AllGame::getCollectionGames($gameName);

		return view('Games.getGame', ['games' => $getCollectionGames]);
	}


И в итоге получаю саму игру и зависимости -> новости и т.п и могу их нормально использовать. Но количество новостей и других бд могут иметь большое количество записей, так что нужна пагинация. Но если использовать такую систему (другая система получения данных не подойдёт), то нельзя использовать (возможно, просто я не знаю о другом способе) пагинацию. Подскажите пожалуйста как можно решить эту проблему. Заранее спасибо.
  • Вопрос задан
  • 631 просмотр
Решения вопроса 1
dima9595
@dima9595 Автор вопроса
Junior PHP
Решил вопрос следующем костылём:

Модель подгрузки данных:
public static function getCollectionGames(string $gameName){
		$game = Games::getGame($gameName);   // Получаем данные об игре

                // "Делаем ленивую нетерпеливую загрузку"
		if($game){
			$game->load(['getNewsGame' => function($news){
                                // Добавляем сортировку и даём скрипту вывести на страницу только 10 новостей.
				$news->orderBy('id_news', 'desc')->paginate(10);
			}]);
		}

		return $game;    // Отдаём эти данные
	}

Добавил обёртку load и добавил paginate(10) что бы выводилось всего 10 новостей.

В шаблоне:
{{ $games->getNewsGame()->paginate(10)->links() }}
Через $games->getNewsGame() я получал все новости. Добавил paginate(10) что бы начала работать пагинация, как буд-то я делаю новый запрос (на счёт этого точно не в курсе, не смотрел дебаг. возможно, действительно, делается ещё 1 запрос). Ну и в конце добавляю links() что бы вывелась сама пагинация.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
есть уже встроенный метод для пагинации

https://laravel.com/docs/5.5/pagination#basic-usage
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект
18 апр. 2024, в 21:56
2000 руб./за проект