如何在Lighthouse GraphQL中随机播放结果(随机排序)?

时间:2020-06-13 14:50:22

标签: graphql laravel-lighthouse

我看到了docs for @orderBy,但很好奇如何将我的Lighthouse GraphQL结果随机排序,有点像Laravel中的inRandomOrder

$randomUser = DB::table('users')
            ->inRandomOrder()
            ->first();

或者像MySQL中的RAND()

SELECT col1, col2
FROM mytable
ORDER BY RAND();

1 个答案:

答案 0 :(得分:2)

由于没有RAND SortOrder枚举,因此目前不可能随便使用灯塔。

您可以为此使用范围。

假设您要从表中随机获取一些用户。在您的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
  }
}

这对于小型数据集来说很好,但请记住,对于大型数据集,这可能是性能瓶颈。

相关问题