Можно ли использовать загрузчик данных 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