Как я могу разбить результат на DB :: select (...) и получить метод links ()? - PullRequest
0 голосов
/ 09 ноября 2019

У меня большой и сложный SQL-запрос. Он отлично работает для меня. И у меня есть следующий код в контроллере:

 public function index(OpenRegDepDataReportInterface $openRegDepDataReport, Request $request): Renderable
    {
        $applications = $openRegDepDataReport->getReport($advertisers, $category);

        return view('applications.index', compact('applications'));
    } 

Итак, метод getReport дает мне результат DB::select('<here is my big diffecult SQL>'), и, как известно, это массив.

Но, как вы видите, я пытаюсь передать результат в виде. И, конечно же, я хотел бы назвать $applications->links() в представлении, как для eloquent коллекции. Какой правильный и быстрый способ сделать это?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2019

Таким образом, на основании документации, если ваш $applications возвращает результат построителя запросов, просто добавьте к нему ->paginate(10);.

https://laravel.com/docs/master/pagination#paginating-query-builder-results

$applications = $openRegDepDataReport->getReport($advertisers, $category)->paginate(10);
0 голосов
/ 09 ноября 2019

Простой ответ , используйте paginate() метод:

$basicQuery = DB::select(DB::raw("<here is the big diffcult SQL query>"));

Однако paginate() работает только для коллекций, и, поскольку у вас есть массив объектов, вам нужно повернутьсначала в коллекцию, используя метод forPage():

Метод forPage возвращает новую коллекцию, содержащую элементы, которые будут присутствовать на данном номере страницы. Метод принимает номер страницы в качестве первого аргумента и количество элементов, отображаемых на странице, в качестве второго аргумента:

$collection = collect($basicQuery);
$chunk = $collection->forPage(2, 3);
$chunk->all();

Сложный ответ : построитьСам экземпляр paginator:

$perPage = 10;
$page = $request->input("page", 1);
$skip = $page * $perPage;
if($take < 1) { $take = 1; }
if($skip < 0) { $skip = 0; }

$basicQuery = DB::select(DB::raw("<here is the big diffcult SQL query>"));

$totalCount = $basicQuery->count();
$results = $basicQuery
    ->take($perPage)
    ->skip($skip)
    ->get();

$paginator = new \Illuminate\Pagination\LengthAwarePaginator($results, $totalCount, $take, $page);

return $paginator;

Я бы порекомендовал использовать метод paginate().

Вы можете узнать больше о Пагинация Ларавела .

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