配置PostGraphile以支持简洁的嵌套Mutations
如何配置PostGraphile实现简洁的嵌套Mutation写法?
要实现类似Hasura的简洁嵌套Mutation写法,你需要结合两个PostGraphile社区插件,并调整相关配置,核心是简化关联字段命名并优化嵌套突变的输入结构:
1. 安装必要插件
首先安装用于简化字段命名和支持嵌套突变的两个插件:
npm install @graphile-contrib/pg-simplify-inflector @graphile-contrib/pg-nested-mutations # 或使用 yarn yarn add @graphile-contrib/pg-simplify-inflector @graphile-contrib/pg-nested-mutations
2. 配置PostGraphile
在PostGraphile的启动配置中启用插件,并调整字段简化和嵌套突变的规则:
Node.js环境示例配置
const { postgraphile } = require("postgraphile"); const PgSimplifyInflectorPlugin = require("@graphile-contrib/pg-simplify-inflector"); const PgNestedMutationsPlugin = require("@graphile-contrib/pg-nested-mutations"); // 假设使用Express框架 app.use( postgraphile(process.env.DATABASE_URL, "public", { // 追加所需插件 appendPlugins: [PgSimplifyInflectorPlugin, PgNestedMutationsPlugin], // 构建配置 graphileBuildOptions: { // 简化关联字段命名:将`addressToAddressId`这类自动生成的字段名改为自然的`address` pgSimplifyInflector: { simplifyRelations: true, singularizeRelations: true, }, // 配置嵌套突变:让关联字段直接接受子实体数据,自动触发创建操作 pgNestedMutations: { // 设置默认操作:传入关联对象时自动执行创建 defaultOperation: "create", // 去掉嵌套字段的后缀(如避免生成`addressCreate`这类字段) fieldNameSuffix: "", }, }, // 其他可选配置 watchPg: true, graphiql: true, }) );
3. 使用简化后的Mutation写法
配置完成后,你就可以使用和Hasura一致的简洁语法执行嵌套创建:
mutation MyMutation { createCustomer(input:{firstName: "Breda", lastName: "Smith", address:{line1: "5", line2: "The Street"}}) { address { id } customer { id } } }
关键说明
- 确保数据库中
Customer表的address_id外键正确关联到Address表的主键,PostGraphile才能自动识别关联关系。 - 如果需要支持连接已有子实体(而非创建新实体),可以调整
pgNestedMutations.defaultOperation为connect,或在Mutation中显式指定操作类型(如address: {connect: {id: 123}})。
内容的提问来源于stack exchange,提问作者Mike Hogan
相关产品推荐
相关产品推荐

