如何在我的查询中使用Elixir中的Absinthe在嵌套项目上使用参数?

问题描述:

我想了解如何在我的查询中使用Absinthe嵌套项目上使用参数。如何在我的查询中使用Elixir中的Absinthe在嵌套项目上使用参数?

我试图做到的是:

{ 
    users(order: ASC) { 
    id 
    email 
    clients(order: DESC) { 
     id 
     email 
    } 
    } 
} 

这里是我的模式和类型:

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 

与分解:

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

所以我的问题是如何以及在何处我应该为客户提供排序参数吗? 采用上述例子中,我得到一个错误:

"message": "Unknown argument \"order\" on field \"clients\" of type \"User\"." 
+0

此[Q &A](https://*.com/questions/34155439/getting-error-unknown-argument-id-on-field-user-of-type-query-graphql?rq=1)可能有些东西可以帮助你。 –

把参数下clients字段:

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 

然后写一个旋转变压器,以处理排序:

def clients(user, %{order: clients_order}, _) do 
    sorted_clients = user.clients # TODO sort those clients into the desired order 
    {:ok, sorted_clients} 
end