graphQL 在公共列上加入

graphQL join on common column

我们如何在 graphQL 中的公共列上进行数据连接。

例如在 SQL 中:Select t.name 和 z.address 其中 t.id=z.id;

这是如何通过 graphQL 查询管理的。

How is this managed by GraphQL query?

简短的回答:不是(托管)。你必须把它写在你的解析器中。

您的 GraphQL 模式基本上只是表示 节点 的类型的声明,以及表示 中的 的字段]图。 GraphQL 是查询此图的语言。在模式的每条边上,您编写一个函数来说明查询遍历该边时如何获取数据。此函数称为 "resolver",只要 returns 有效数据,您几乎可以将任何代码放入解析器中。这意味着 GraphQL 完全、绝对独立于数据库。您的解析器负责与您的数据库对话。

因此,当涉及到 SQL 和加入时,进行查询的问题完全由 API 开发人员负责。 GraphQL 对 SQL 或连接一无所知,因此这本质上是您必须编写的应用程序的自定义逻辑。事实证明,如果没有 运行 急切获取过多数据或 "N+1" 等问题,构建 SQL 查询来解析 GraphQL 查询的数据是非常困难的。

开源社区中出现了一些工具来帮助解决这个问题。这是我在 Node.js space:

中推荐的一对
  • DataLoader - 一种与数据库无关的工具,可批量查询和缓存单个记录。
  • Join Monster - SQL 定制的高效数据检索和查询批处理工具。它会检查每个查询和您的模式并动态生成 SQL 个查询。

免责声明:我是 Join Monster 的共同创作者。