首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >灵丹妙药+ Absinthe + Ecto + Dataloader -多字段过滤

灵丹妙药+ Absinthe + Ecto + Dataloader -多字段过滤
EN

Stack Overflow用户
提问于 2019-11-21 22:19:29
回答 1查看 1.1K关注 0票数 0

使用Elixir/Absinthe/Ecto/Dataloader,如何通过多个字段查询/筛选源?

示例:

假设您希望通过两个字段筛选一个名为User的模式(和dataloader源),一个字段名为is_admin (只有true值),另一个group_id可以是列表中的任何值,e.g [1, 5, 9]

使用Dataloader的效果如何?

这来自模式定义:

代码语言:javascript
复制
alias App.Data

# ...

object :app do
  field :users, list_of(:user) do
    resolve fn app, _args, %{context: %{loader: loader}} ->

      params = [is_admin: true, group_id: [1,2,3]]

      loader
      |> Data.load_many(:users, params)
      |> on_load(fn loader ->
        {:ok, Data.get_many(loader, :user, params)}
      end)
    end
  end
end

这是数据源模块:

代码语言:javascript
复制
defmodule App.Data do
  alias App.User

  def data do
    Dataloader.Ecto.new(Repo, run_batch: &run_batch/5)
  end

  def load_many(loader, :users, [is_admin: is_admin, group_id: ids]) do
    Dataloader.load(loader, __MODULE__, {:many, {User, is_admin: is_admin}}, group_id: ids)
  end

  def get_many(loader, :users, [is_admin: is_admin, group_id: ids]) do
    Dataloader.load(loader, __MODULE__, {:many, {User, is_admin: is_admin}}, group_id: ids)
  end

  def run_batch(queryable, query, col, inputs, repo_opts) do
    Dataloader.Ecto.run_batch(Repo, queryable, query, col, inputs, repo_opts)
  end
end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-22 10:41:39

因此,为了回答我自己的问题,解决方案是利用Dataloader的&query/2,因此GQL解析器中的解析器基本上如下所示:

代码语言:javascript
复制
loader
|> Data.load({:many, User, group_ids: ids}, is_admin: true)
|> on_load(fn loader ->
   loader
   |> Data.get({:many, User, group_ids: ids}, is_admin: true)
   # ...
end)

..。query/2模块中的App.Data方法如下所示:

代码语言:javascript
复制
defp query(User, %{group_ids: ids}) do
   from u in User, where: u.group_id in ^ids
end

在此解释如下:

https://hexdocs.pm/lazyloader/Dataloader.Ecto.html#module-filtering-ordering

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58984606

复制
相关文章

相似问题

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