graphql - 如何在 Lighthouse GraphQL 中打乱结果(随机排序)?
问题描述
我看到了文档,@orderBy
但很好奇如何随机排序我的 Lighthouse GraphQL 结果,有点像LaravelinRandomOrder
中的:
$randomUser = DB::table('users')
->inRandomOrder()
->first();
或者像RAND()
在 MySQL 中一样:
SELECT col1, col2
FROM mytable
ORDER BY RAND();
解决方案
目前,由于没有RAND
SortOrder 枚举,因此无法使用 lighthouse 开箱即用。
您可以为此使用范围。
假设您想从表中随机抓取一些用户。在您的用户查询中创建范围schema.graphql
type Query {
posts(
random: Boolean @scope(name: "random")
): [User!]!
}
在您的范围内创建App\User.php
:
// ...
/**
* Shuffles the users randomly
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeRandom($query) {
return $query->inRandomOrder();
}
// ...
在查询中使用范围:
{
users(random: true)
{
id,
email,
username
}
}
这对于小型数据集很好,但请记住,对于较大的数据集,这可能是性能瓶颈。
推荐阅读
- ms-project - MS Project 在甘特图上方创建报告视图
- r - distHaversine 函数两点之间的距离
- swift - 快速从 rgb 数据创建图像
- apache-kafka - kafka 镜像到 eventthub 是否保证订单?
- java - 如何在恢复主要活动之前显示 admob 插页式广告
- c# - EF Core 和 Automapper 不能很好地处理嵌套子关系
- visual-studio-code - 如何配置 VSC Live Server,使其在应用内“浏览器预览”扩展而不是外部浏览器中自动打开?
- sql - Retrieving posts with latest 2 comments of each post in postgres
- java - 使用 JAXB 从 XML 读取时如何检查 TreeSet 中元素的唯一性?
- javascript - AJAX 自动重新加载表不会执行