是否可以使用 elixir 数据加载器belongs_to
有效地查询关系?似乎load
正在查询它需要的所有项目,但是get
无论它实际需要哪个项目,它都会返回已加载项目的第一个值。这是我现在使用的代码:
field :node, :node_object, resolve: fn parent, _, %{context: %{loader: loader}} ->
# parent.node_id = 1, but concurrently also another parent.node_id = 5
loader
|> Dataloader.load(NodeContext, :node, parent) # loads node_id 5 and 1
|> on_load(fn loader ->
loader
|> Dataloader.get(NodeContext, :node, parent) # always returns the node with id = 5
|> (&{:ok, &1}).()
end)
end
我目前的工作是使用以下代码,但它使代码更加丑陋且与 Ecto 模式不友好,因为我需要在此处显式指定父模式的节点模式和 node_id 字段,而不是让数据加载器从现有的外模式:
field :node, :node_object, resolve: fn parent, _, %{context: %{loader: loader}} ->
loader
|> Dataloader.load(NodeContext, {:one, NodeSchema}, id: parent.node_id)
|> on_load(fn loader ->
loader
|> Dataloader.get(NodeContext, {:one, NodeSchema}, id: parent.node_id)
|> (&{:ok, &1}).()
end)
end