Как разбить на страницы и отсортировать результаты в Laravel? - PullRequest
0 голосов
/ 20 ноября 2018

Мне нужно разбить результаты на страницы и отсортировать их, используя sortBy (), без потери ссылок на страницы. Мне также нужно использовать ресурс для возврата результатов.

$sorted = Model::paginate(10)->sortBy('name');

$results = \App\Http\Resources\MyResource::collection($sorted);

Это нарушает нумерацию страниц (я получаю только часть данных).

$paginated = Model::paginate(10);

$results = \App\Http\Resources\MyResource::collection($paginated);

return $results->sortBy('name');

Это тоже не работает. Есть идеи?

Ответы [ 2 ]

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

Я решил проблему с этим решением:

$sorted = Model::get()
    ->sortBy('example_function')  //appended attribute
    ->pluck('id')
    ->toArray();

$orderedIds = implode(',', $sorted);

$result = DB::table('model')
    ->orderByRaw(\DB::raw("FIELD(id, ".$orderedIds." )"))
    ->paginate(10);

Я добавил атрибут example_function к модели, который будет использоваться sortBy. Благодаря этому решению я смог использовать orderBy для упорядочения по добавленному атрибуту модели. А также я смог использовать нумерацию страниц.

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

Я думаю, что вы можете сначала отсортировать результаты, а затем разбить на страницы

$sorted = Model::orderBy('name')->paginate(10);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...