Использование параметра limit в функции paginate

Можно ли использовать параметр limit в функции paginate ()?

Я пробую это:

$users->where(...)->limit(50)->paginate($page)

... и теперь, если у меня в базе данных 100 пользователей, тогда ответ от функции paginate будет состоять из всех 100 пользователей вместо 50 (или количества пользователей, определенных параметром limit).

Итак, мой вопрос: можно ли реализовать параметр limit, когда я использую функцию paginate?


person Damjan Krstevski    schedule 18.04.2017    source источник


Ответы (5)


Нет, невозможно ограничить запрос при использовании разбивки на страницы.

При разбивке на страницы запросов используются skip() и limit() для выбора нужных записей. Любой limit(), примененный к запросу, будет перезаписан требованиями разбивки на страницы.

Если вы хотите разбить на страницы подмножество результатов, вам нужно сначала получить результаты, а затем вручную создать пагинатор для этих результатов.

person patricus    schedule 18.04.2017

Используйте LengthAwarePaginator.

Пример:

$total = 50;
$perPage = 10;
$users = $users->where(...)->paginate($page);

$users = new LengthAwarePaginator(
    $users->toArray()['data'], 
    $users->total() < $total ? $users->total() : $total, 
    $perPage, 
    $page
);
person mustardandrew    schedule 17.11.2017

Если вы хотите использовать ограничение в запросе Laravel, тогда мы будем использовать смещение для разбивки на страницы.

Первый раз

$ users-> где (...) -> limit (10) -> offset (0);

При следующем щелчке

$ users-> где (...) -> limit (10) -> offset (10);

Далее следующий щелчок

$ users-> где (...) -> limit (10) -> offset (20);

person Raghu Aryan    schedule 20.03.2020

По умолчанию текущая страница определяется значением аргумента строки запроса страницы в HTTP-запросе. Конечно, это значение автоматически определяется Laravel, а также автоматически вставляется в ссылки, генерируемые пагинатором.

Итак, проинформируйте страницу и разбиение на страницы, и все должно быть в порядке.

person Marcelo Agimóvel    schedule 15.10.2017

как @patricus сказал, что это невозможно, но вы можете прогуляться, чтобы получить то, что хотите, это будет примерно так:

$users=User::where(...)->limit(50);
$users=$user->paginate(10);

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

person IBRAHIM EZZAT    schedule 21.07.2020