在 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。
目前,我正在连接到数据库并使用 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。