如何在其他文件中使用graphql类型进行关系而不重复

时间:2019-12-30 21:52:13

标签: graphql apollo-server

我正在尝试将所有表放在不同的目录中。但是,我遇到了一些问题。查看下面的ExpenseItem。 ExpenseType在ExpenseType目录下,因此graphql引发错误。为了解决这个问题,我需要在ExpeseItem / typeDefs中添加ExpenseType,这是多余的。

ExpenseItem / typeDefs

   type ExpenseItem {
        id: ID!
        name: String,
        updatedAt: DateTime,
        expenseType: [ExpenseType]
    }

是否有更好的方法来拼接模式?

我也尝试过类似的方法。但是,graphql停止工作。 当我查询时,它没有进入解析器,安装程序是否有问题?

const schemas = makeExecutableSchema({
  typeDefs: `
    scalar JSON
    scalar DateTime
    type Query {
      test: String
    }
    ${typeDefs1}
    ${typeDefs2}
    ${typeDefs3}
    ${typeDefs4}

  `,
  resolvers: {
    // Type resolvers
    JSON: GraphQLJSON,
    DateTime: GraphQLDateTime,

    // schema resolvers
    ...resolvers1,
    ...resolvers2,
    ...resolvers3,
    ...resolvers4
  }

})

const server = new ApolloServer({
  schema,

  context: { db }
 })

1 个答案:

答案 0 :(得分:0)

您不能像这样合并您的解析器。使用散布运算符合并对象会导致浅合并。如果合并的对象共享任何公共属性(例如$event->sport->category),则在结果对象中将仅出现最后一个合并的属性。您需要深度合并对象。您可以自己这样做,也可以使用<p> {{ $event->sport->name }} </p> <!-- ... --> <p> {{ $event->sport->category->name }} </p> 的{​​{1}}之类的东西。

此外,您可以将字符串数组作为Query传递给lodash,而不是自己组合。