首页 > 解决方案 > 如何在 Lighthouse GraphQL 中打乱结果(随机排序)?

问题描述

我看到了文档,@orderBy但很好奇如何随机排序我的 Lighthouse GraphQL 结果,有点像LaravelinRandomOrder中的:

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

或者像RAND()在 MySQL 中一样:

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

标签: graphqllaravel-lighthouse

解决方案


目前,由于没有RANDSortOrder 枚举,因此无法使用 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
  }
}

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


推荐阅读