我需要对结果进行分页并使用 sortBy() 对它们进行排序,而不丢失分页链接。我还需要使用资源来返回结果。
$sorted = Model::paginate(10)->sortBy('name');
$results = \App\Http\Resources\MyResource::collection($sorted);
Run Code Online (Sandbox Code Playgroud)
这样做会破坏分页链接(我只得到数据部分)。
$paginated = Model::paginate(10);
$results = \App\Http\Resources\MyResource::collection($paginated);
return $results->sortBy('name');
Run Code Online (Sandbox Code Playgroud)
这也是行不通的。有任何想法吗?
使用分页器类中的getCollection()和setCollection()方法,您可以更新分页结果而不丢失元数据。
$result = Post::orderBy('another_key')->paginate();
$sortedResult = $result->getCollection()->sortBy('key_name')->values();
$result->setCollection($sortedResult);
return $result;
Run Code Online (Sandbox Code Playgroud)
我认为你可以先对结果进行排序,然后再分页
$sorted = Model::orderBy('name')->paginate(10);
Run Code Online (Sandbox Code Playgroud)
我已经用这个解决方案解决了这个问题:
$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);
Run Code Online (Sandbox Code Playgroud)
我已将 example_function 属性附加到模型中,以供 sortBy 使用。通过这个解决方案,我能够使用 orderBy 按模型的附加属性进行排序。而且我还能够使用分页。
| 归档时间: |
|
| 查看次数: |
17017 次 |
| 最近记录: |