Я пытаюсь изменить и запросить динамические c переменные. Пользователь может добавить столько переменных, сколько он хочет, прежде чем отправлять их на сервер. Например, мое приложение представляет собой приложение для повышения производительности, которое позволяет пользователю добавлять столько метрик, сколько они хотят, чтобы отслеживать свою цель, поэтому, если целью является «Тренажерный зал», метрики будут «бегать», «жим лежа» и т. Д. c. Моя проблема в том, что я не уверен, как сохранить их в базе данных, так как нет предварительно настроенной схемы для этих пользовательских переменных.
Мне удалось отправить переменные на сервер, используя следующее:
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)
},
Однако, поскольку число переменных неизвестно, как мне сохранить 'metri c' в моей базе данных?
Если бы я попробовал следующее:
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.metri c"; Поле "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.metri c"; Поле "0" не определено типом GoalCreatemetricInput. Переменная "$ _v0_data" получила недопустимое значение ["Asdfasdf", "Asdfasdf"] в "_v0_data.metri c"; Поле "1" не определено типом GoalCreatemetricInput.