首页 > 解决方案 > Strapi - 如何使用自定义属性扩展 graphql 类型模式?

问题描述

假设我在创建为 Strapi 内容类型的 Author 类型架构上有“ firstName ”和“ lastName ”属性。

我可以使用 graphql 查询它们,但是如果我想查询“ fullName ”属性而不在我的内容类型上添加该字段怎么办?

由于字段不存在,现在它说:Cannot query field \"fullName\" on type \"Author\"

如何使用附加的“虚拟”字段扩展现有类型模式?

标签: graphqlstrapi

解决方案


我设法使用位于api/author/config文件夹中的schema.graphql文件中的以下代码来做到这一点:

module.exports = {
  definition: `type AuthorOverride {
  firstName: String
  lastName: String
  fullName: String
}`,
  query: `
    authors: [AuthorOverride]
  `,
  type: {
    Author: false
  },
  resolver: {
    Query: {
      authors: {
        description: 'Return the authors',
        resolver: 'Author.find'
      }
    }
  }
};

关键是在使用不同类型名称(AuthorOverride)的同时使用附加字段定义模式以避免重复类型错误。

此外,设置 type: { Author: false } 以便原始类型不可查询。

现在,在我的解析器函数“Author.find”(放置在我的 Author.js 控制器中)中,我可以映射 fullName 值。

如果有人有更合适的解决方案来在 Strapi 中扩展 graphql 模式,请随时发布。


推荐阅读