如何使用graphql将动态数量的变量保存到数据库中?

问题描述 投票:0回答:1

我正在尝试对动态变量进行突变和查询。用户可以选择添加任意数量的变量,然后再将其发送到服务器。例如,我的应用程序是一个生产力应用程序,它允许用户添加想要跟踪其目标的尽可能多的指标,因此,如果“健身房”是他们的目标,则这些指标将是“运行中”,“卧推”等。问题是,我不确定如何将它们保存在数据库中,因为这些用户创建的变量没有预先配置的架构。

我已经设法使用以下命令将变量发送到后端:

mutation CreateGoal ($title: String!, $description: String, $metric: [Json!]) {
    createGoal(
      data: {
        title: $title
        description: $description
        metric: { set: $metric }
    }
    ){
      id
    }
  } 

模式:

type Mutation { 
    createGoal(data: CreateGoalInput!): Goal!
}

input CreateGoalInput {
    title: String!
    description: String
    metric: GoalCreatemetricInput
}

input GoalCreatemetricInput {
  set: [Json!]
}

一旦变量到达解析器,它的格式为Json

{ set: [ 'running', 'bench press' ] }

通常,我只是通过Prisma保存变量:

 async createGoal(parent, { data }, { request, prisma }, info) {
        const { title, description, metric } = data && data
        return prisma.mutation.createGoal({
            data: {
                user: {
                    connect: {
                        email: user.email
                    }
                },
                title,
                description,
            }
        }, info)
    },

但是,由于变量数量未知,如何将“度量”保存到数据库中?

如果要尝试以下操作:

 async createGoal(parent, { data }, { request, prisma }, info) {
        const { title, description, metric } = data && data
        return prisma.mutation.createGoal({
            data: {
                user: {
                    connect: {
                        email: user.email
                    }
                },
                title,
                description,
                metric,
            }
        }, info)
    },

我收到错误:

错误:变量“ $ _v0_data”的值无效[[正在运行],“基准在“ _v0_data.metric”处按“];字段“ 0”未按类型定义GoalCreatemetricInput。

如果我要尝试:

 async createGoal(parent, { data }, { request, prisma }, info) {
        const { title, description, metric } = data && data
        return prisma.mutation.createGoal({
            data: {
                user: {
                    connect: {
                        email: user.email
                    }
                },
                title,
                description,
                metric: metric.set
            }
        }, info)
    },

我收到错误:

错误:变量“ $ _v0_data”的值无效[[正在运行”,“基准在“ _v0_data.metric”上按“];字段“ 0”未按类型定义GoalCreatemetricInput。变量“ $ _v0_data”的值无效[_v0_data.metric“中的[” Asdfasdf“,” Asdfasdf“];字段“ 1”不是由GoalCreatemetricInput类型定义。

node.js reactjs graphql react-apollo prisma
1个回答
0
投票

我认为您根本不需要使用Json标量。似乎您正在尝试传递字符串数组,因此您可能只需要使用[Json!]即可代替[String!]

© www.soinside.com 2019 - 2024. All rights reserved.