Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graphql 我不知道';我得不到图表。如何解决N+;1没有预加载的问题?_Graphql_Elixir_Dataloader_Absinthe - Fatal编程技术网

Graphql 我不知道';我得不到图表。如何解决N+;1没有预加载的问题?

Graphql 我不知道';我得不到图表。如何解决N+;1没有预加载的问题?,graphql,elixir,dataloader,absinthe,Graphql,Elixir,Dataloader,Absinthe,一个社区有很多家。每户人家都有一个人 假设我有这个graphql查询: { neighborhoods { homes { owner { name } } } } 我可以预加载所有者,这将使数据请求成为单个SQL查询。好的 但是如果我没有在graphql查询中请求所有者,数据仍然会被预加载 如果我没有预加载,数据要么在每个查询中都会被提取,要么根本不会,因为我没有在

一个社区有很多家。每户人家都有一个人

假设我有这个graphql查询:

{
    neighborhoods {
        homes {
            owner {
                name
            }
        }
    }
}
我可以预加载所有者,这将使数据请求成为单个SQL查询。好的

但是如果我没有在graphql查询中请求所有者,数据仍然会被预加载

如果我没有预加载,数据要么在每个查询中都会被提取,要么根本不会,因为我没有在解析器中加载“属于”关联

我不确定这是一个已解决的问题,还是一个在使用graphql时必须接受的痛点


顺便说一下,使用Absince、DataLoader和Elixir。

大多数GraphQL实现,包括Absince,都会公开某种“info”参数,其中包含特定于正在解析的字段和正在执行的请求的信息。您可以解析此对象以确定实际请求了哪些字段,并适当地构建SQL查询


请参阅以获得更深入的讨论。

为了补充Daniel Rearden所说的内容,您必须使用
info.definition
来解析嵌套包含

在我的应用程序中,我定义了一个可能值数组,如:

defp relationships do
  [
    {:person, [tasks: [:items]]]}
    ...
   ]
end
然后我有一个迭代
info.definition
的逻辑,并使用此函数预加载关联


您将使用惰性加载资源。通常用于获取第三方请求或执行复杂的数据库查询。

DataLoader不是等待所有解析程序,然后用所有键点击数据库一次吗?