php - 如何随机化 ResourceCollection 的结果但仍然对 api 结果进行分页
问题描述
我在 Laravel 中设置了一个 API,它返回存储在我的数据库中的专辑的分页结果。它目前返回 15 个结果,其余的分页,但是我想在分页之前随机化结果。这是我的 api.php 中的代码
<?php
use Illuminate\Http\Request;
use App\Album;
Route::apiResource('/album', 'AlbumController');
这是 AlbumController.php 的代码
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Album;
use App\Http\Resources\AlbumResource;
use App\Http\Resources\AlbumResourceCollection;
class AlbumController extends Controller
{
/**
* Return AlbumResource which wraps all data in an object named data.
*
* @param Album $album
* @return AlbumResource
*/
public function show(Album $album): AlbumResource {
return new AlbumResource($album);
}
public function index(): AlbumResourceCollection {
return new AlbumResourceCollection(Album::paginate());
}
}
我尝试更改 index() 函数,并且能够随机化 15 个结果,但是,我最终失去了分页。我确实通过将功能更改为此来实现了这一点:
public function index(): AlbumResourceCollection {
return new AlbumResourceCollection(Album::all()->random(15));
}
我想要的是这样的东西:
- 获取所有结果
- 随机化结果
- 分页
我也尝试过,但出现错误:
public function index(): AlbumResourceCollection {
return new AlbumResourceCollection(Album::all()->random()->paginate());
}
关于我能做些什么来实现这一点的任何想法?
解决方案
我的问题的解决方案与评论中提到的 lagbox 一样。我将索引函数更新为以下内容:
public function index(): AlbumResourceCollection {
return new AlbumResourceCollection(Album::inRandomOrder(rand(0, 5000))->paginate());
}
推荐阅读
- css - 在 Selenium IDE 变量中存储与 CSS 选择器匹配的元素列表
- android - 如何用Java模拟Android中的按钮点击?
- reactjs - React - 导入依赖于另一个已经依赖于 package.json 的依赖项时出错
- javascript - 按星期、星期和年份设置日期
- node.js - 缺少必需的标头授权。确保在 Azure Cosmos DB 中传递了有效的授权令牌
- amazon-web-services - AWS S3 存储桶 MFA 启用
- google-cloud-platform - 如何限制谁可以运行我的 GCP Cloud 功能?
- embedded - 在 BusyBox 嵌入式系统上安装 OpenVPN
- python - 在 Pandas 中通过修改复制一行
- php - 如何在排除中给出多个文件?