Laravel Lighthouse GraphQL - 在服务器端排序

Posted

技术标签:

【中文标题】Laravel Lighthouse GraphQL - 在服务器端排序【英文标题】:Laravel Lighthouse GraphQL - Sorting on server side 【发布时间】:2019-11-23 11:37:34 【问题描述】:

您好,我是 GraphQL 新手,我正在尝试根据列内容对数据进行排序。我有一个可以发送的查询端点:

query 
  user(count:20, firstName:"Foo") 
    data 
      name
      region
      birthDate
    
  

结果是一个包含 20 个名字为 Foo 的用户的数组。但我想通过birthDate 订购它们。我已经尝试了很多东西,但我就是想不通。我已经尝试在名字之后添加 sortorderBy,但我总是收到如下错误:


  "errors": [
    
      "message": "Unknown argument \"sort\" on field \"user\" of type \"Query\".",
      "extensions": 
        "category": "graphql"
      ,
      "locations": [
        
          "line": 2,
          "column": 31
        
      ]
    
  ]

我使用 Laravel Lighthouse 作为 GraphQL 的 wapper。我很惊讶我找不到任何有关如何执行此操作的信息。

我的查询:

type Query 
    user(firstName: String @eq): [User!]! @paginate(type: "paginator" model: "App\\User")


type User 
    id: ID!
    firstName: String!
    lastName: String!
    birthDate: DateTime!
    email: String!
    created_at: DateTime!
    updated_at: DateTime!

【问题讨论】:

【参考方案1】:

又找了一个小时,终于找到了。我将我的 graphql 文件更新为:

type Query 
    user(firstName: String @eq orderBy: [OrderByClause!] @orderBy): [User!]! @paginate(type: "paginator" model: "App\\User")


type User 
    id: ID!
    firstName: String!
    lastName: String!
    birthDate: DateTime!
    email: String!
    created_at: DateTime!
    updated_at: DateTime!


input OrderByClause
    field: String!
    order: SortOrder!


enum SortOrder 
    ASC
    DESC

现在使用此查询将按出生日期正确排序:

query 
  user(count:20, firstName:"Foo", orderBy: [
        
          field: "birthDate"
          order: DESC
        
    ]) 
    data 
      name
      region
      birthDate
    
  

【讨论】:

谢谢!这使我免于更多小时的愤怒搜索。 =)

以上是关于Laravel Lighthouse GraphQL - 在服务器端排序的主要内容,如果未能解决你的问题,请参考以下文章

如何在lighthouse graphql laravel中获取自定义指令参数?

Laravel Lighthouse 配置 - 无法找到可发布的资源

变异中的 Laravel LightHouse GraphQL DateTime 输入始终为空

在 Laravel Lighthouse 中添加自定义类型和解析器

Laravel Lighthouse 限制突变场

Laravel Lighthouse 中的授权