在 graphql 解析器中查询来自 mySQL 的现有链接表?

Querying existing linked tables from mySQL in a graphql resolver?

目前,我正在连接到数据库并使用 Sequelize 创建表,然后使用 Graphql 完成其余工作,制作模式、查询和解析器。

我似乎在如何从这 3 个链接表中获取数据时遇到了困难:

CITY CompLocations CompIssue | id | | locationID | compID | | locationID | issueLevel | |*1* | -----> | 1 | 45 | ------> | 45 | *5* | 2 | | 2 | 203 | | 203 | 3

我只需要通过这个现有的 relation/association.

检索与 CITY.id 关联的所有 CompIssue.issueLevel

我正在 Sequelize 的 API 中查看关联和查询。如何在 Grapql/Apollo 解析器函数中查询上述内容?

我知道这是一个较旧的问题,但我最近遇到了类似的问题。在我的例子中,我使用 seriate 从 Nodejs 连接到 MSSQL 服务器,并希望基于数据库设计动态创建 GraphQL 模式(遵循链接字段等创建 sub-queries)。走这条路我得到了 sql:

`SELECT 
   BASE_TABLE = t.TABLE_NAME, 
   BASE_COLUMN = col.COLUMN_NAME, 
   DATA_TYPE, 
   LEN_PRECISION = COALESCE(
                             CHARACTER_MAXIMUM_LENGTH, 
                             numeric_precision, 
                             datetime_precision
                   ), 
   LINKED_TABLE = keys.Data_Table, 
   LINKED_COLUMN = keys.Data_Column 
FROM INFORMATION_SCHEMA.TABLES t INNER JOIN 
   INFORMATION_SCHEMA.COLUMNS col ON 
      t.TABLE_NAME = col.TABLE_NAME LEFT JOIN 
   ( SELECT 
            Base_Table = FK.TABLE_NAME, 
            Base_Column = CU.COLUMN_NAME, 
            Data_Table = PK.TABLE_NAME, 
            Data_Column = PT.COLUMN_NAME, 
            Constraint_Name = C.CONSTRAINT_NAME 
     FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C INNER JOIN 
            INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON 
               C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME INNER JOIN 
            INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON 
               C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME INNER JOIN 
            INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON 
               C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME INNER JOIN 
            ( SELECT 
                     i1.TABLE_NAME, 
                     i2.COLUMN_NAME 
              FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1 INNER JOIN 
                     INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON 
                         i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME 
              WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY' 
             ) PT ON 
             PT.TABLE_NAME = PK.TABLE_NAME 
   ) keys ON 
      keys.Base_Table = t.TABLE_NAME AND 
      keys.Base_Column = col.COLUMN_NAME 
WHERE t.TABLE_TYPE = 'BASE TABLE'`

这可能不是最优雅的,并且可能会在大型数据库上遇到一些性能问题,但它对我来说效果很好。最终数据集将为您提供 table/column 对的列表以及指向数据库设计中其他 table/column 对的任何链接。

从这个数据集中,应该 "trivial" 检查链接并创建您在 GraphQL 设置中需要的任何 sub-queries。