Пагинат Laravel поверх метода пересечения - PullRequest
0 голосов
/ 06 ноября 2018

У меня следующий запрос к БД в Laravel.

    $filteredBundles = $bundlesByPublisher->intersect($bundlesByPublication);

Мне нужно перенести paginate метод на переменную filteredBundles.

bundlesByPublisher возвращает запрос к БД с методом get() и аналогично случаю с bundlesByPublication.

Есть ли способ довести нумерацию страниц до этого пересечения?

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

Коллекция не имеет paginate() метода, но если вы хотите разбить свою коллекцию на страницы, вы можете попробовать

$paginator = new Paginator($filteredBundles, 15); // 15 is items per page

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

0 голосов
/ 06 ноября 2018

Я создал частную функцию сортировки, которой я передам $filteredBundles->toArray()

выход.

private function _getPaginatedItems($items): LengthAwarePaginator
    {
        $currentPage = LengthAwarePaginator::resolveCurrentPage();
        $perPage = 10;
        $currentItems = array_slice($items, $perPage * ($currentPage - 1), $perPage);

        $paginatedItems = new LengthAwarePaginator($currentItems, count($items), $perPage, $currentPage, ['path' => request()->url(), 'query' => request()->query()]);
        return $paginatedItems;
    }

это создает экземпляр pagination и отлично работает.

0 голосов
/ 06 ноября 2018

Нет, вы не можете использовать обычный метод paginate() на перекрестке, потому что paginate() работает с запросами к базе данных, а intersect() является коллекцией.

Что вы можете (и должен ) сделать, это разбить на страницы результаты базы данных. В вашем случае это можно сделать, добавив предложение whereIn() к запросу к базе данных и присвоив ему массив идентификаторов из пересекающегося списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...