GraphQL自省查询结果缺失关联外键列信息,如何获取?
获取GraphQL自省查询中的关联外键列信息
默认情况下,GraphQL自省只会暴露Schema的类型结构,不会直接返回关联关系对应的数据库外键列信息——这类细节属于数据库层面的元数据,不在标准GraphQL自省的覆盖范围内。不过可以通过以下几种方式解决:
自定义Schema嵌入外键信息
如果是你自己维护GraphQL服务,可以给关联字段添加自定义指令或者在描述中明确外键列。比如:type tbl_enterprise { individual_trader: Float tbl_person: tbl_person @foreignKey(column: "individual_trader") }执行自省查询时,就能通过字段的
directives字段提取出外键列名。关联数据库系统表查询
若使用Hasura、Prisma这类自动生成Schema的工具,直接查询数据库的系统表获取外键关系,再和GraphQL自省结果做匹配。以PostgreSQL为例:SELECT tc.table_name AS local_table, kcu.column_name AS local_column, ccu.table_name AS foreign_table, ccu.column_name AS foreign_column FROM information_schema.table_constraints tc JOIN information_schema.key_column_usage kcu ON tc.constraint_name = kcu.constraint_name JOIN information_schema.constraint_column_usage ccu ON tc.constraint_name = ccu.constraint_name WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = 'tbl_enterprise';把查询到的外键映射和自省返回的关联字段对应,就能得到关联对应的列信息。
利用工具专属元数据查询
部分GraphQL工具提供了扩展的元数据查询入口:- Hasura可以通过
__hasura_metadata查询获取关联关系的完整配置,包括外键映射; - Prisma可以查看生成的Schema注释,或者通过Prisma Client的元数据API获取关联细节。
- Hasura可以通过
内容的提问来源于stack exchange,提问作者Muhammed Sami
相关产品推荐
相关产品推荐

