首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Elixir中的Absinthe对查询中的嵌套项使用参数?

如何使用Elixir中的Absinthe对查询中的嵌套项使用参数?
EN

Stack Overflow用户
提问于 2017-10-08 14:47:10
回答 1查看 1.4K关注 0票数 2

我试图了解如何使用Absinthe对查询中的嵌套项使用参数。

我想要做到的是:

代码语言:javascript
复制
{
  users(order: ASC) {
    id
    email
    clients(order: DESC) {
      id
      email
    }
  }
}

这是我的模式和类型:

代码语言:javascript
复制
  query do
    @desc "Get all users"
    field :users, list_of(:user) do
      arg :order, type: :sort_order, default_value: :asc
      resolve &Resolvers.users/2
    end
  end

  @desc "A user"
  object :user do
    field :id, :id
    field :email, :string
    field :clients, list_of(:user)
  end  

而解析器:

代码语言:javascript
复制
  def users(_, args, _) do
    args
    |> Enum.reduce(User, fn
      {:order, order}, query ->
        query |> order_by({^order, :email})
    end)
    |> Repo.all |> Repo.preload([:clients])
  end

因此,我的问题是,我应该如何和在哪里为客户放置排序论点?通过上面的示例,我得到了一个错误:

代码语言:javascript
复制
"message": "Unknown argument \"order\" on field \"clients\" of type \"User\"."
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-18 19:53:58

将该参数放在clients字段下:

代码语言:javascript
复制
object :user do
  field :id, :id
  field :email, :string
  field :clients, list_of(:user) do
    arg :order, type: :sort_order, default_value: :asc
    resolve &Resolvers.clients/2
  end
end 

然后编写一个解析器来处理排序:

代码语言:javascript
复制
def clients(user, %{order: clients_order}, _) do
  sorted_clients = user.clients # TODO sort those clients into the desired order
  {:ok, sorted_clients}
end
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46632392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档