Разбить коллекцию Laravel на страницы

У меня есть два разных запроса, которые я объединяю, чтобы вернуть коллекцию

$combinados = $histMe->merge($hist)->sortByDesc('created_at');

И я возвращаю их так:

$final = $combinados->all();

Но это печатает всю коллекцию, как я могу разбить это на страницы? Метод Laravel paginate() не работает с коллекциями. И как я могу управлять им из представления?

Спасибо!


person Alejandro Paredes    schedule 10.11.2018    source источник
comment
это может вам помочь: stackoverflow.com/a/56142421/6901246   -  person Rohallah Hatami    schedule 28.12.2020


Ответы (2)


Вы можете использовать этот код, который я написал давным-давно:

Вы должны использовать разбиение на страницы с учетом длины:

use Illuminate\Pagination\LengthAwarePaginator;


public function paginate($items, $perPage,$setDefaultOption = true, $options = [])
    {
        if($setDefaultOption){
            $options = ['path' => request()->url(), 'query' => request()->query()];
        }
        $page = Input::get('page', 1); // Get the current page or default to 1


        $items = $items instanceof Collection ? $items : Collection::make($items);

        return new LengthAwarePaginator($items->forPage($page, $perPage), $items->count(), $perPage, $page, $options);
    }
person Salar Bahador    schedule 10.11.2018

API немного изменился в более новых версиях. Чтобы разбить коллекцию на страницы, вам теперь нужно использовать forPage.

Метод forPage принимает два параметра:

forPage(int $page, int $perPage)

Итак, вы можете сделать что-то подобное в своем контроллере:

...
public function index(Request $request)
{
    $combinados = $histMe->merge($hist)->sortByDesc('created_at');

    $combinados->forPage($request->get('page'), 25);
}
...
person adam    schedule 10.11.2018
comment
Как управлять нумерацией страниц в представлении лезвия? - person Alejandro Paredes; 11.11.2018
comment
@AlejandroParedes Разбивка на страницы управляется первым аргументом, а количество элементов на странице контролируется вторым аргументом. Вы можете вернуть все, что хотите, в свой вид лезвия. Обычно разбиение на страницы управляется параметром page url. - person adam; 11.11.2018