Prisma не может создать тип пользователя из-за аргумента массива?

Это мой InputType в schema.graphql:

input RegisterInput {
  birthday: String!
  email: String!
  firstName: String!
  gender: String!
  interests: [String!]!
  lastName: String!
  password: String!
}

а это моя мутация:

const RegisterInput = inputObjectType({
  name: 'RegisterInput',
  definition(t) {
    t.string('birthday', { nullable: false });
    t.string('email', { nullable: false });
    t.string('firstName', { nullable: false });
    t.string('lastName', { nullable: false });
    t.string('gender', { nullable: false });
    t.string('password', { nullable: false });
    t.list.field('interests', {
      type: 'String',
      nullable: false,
    });
  },
});

const Mutation = objectType({
  name: 'Mutation',
  definition(t) {
    t.field('register', {
      type: User,
      args: {
        data: arg({ type: RegisterInput }),
      },
      resolve: async (
        _root,
        { data: { password, interests, ...userData } },
        { prisma }
      ) => {
        const hashedPassword = await bcrypt.hash(password, 10);
        const user = await prisma.user.create({
          data: {
            ...userData,
            interests: [...interests],
            password: hashedPassword,
          },
        });
        return user;
      },
    });

мои интересы - это просто массив строк,. например: ['abcd', 'def']

но я получил эту ошибку:

Unknown arg `0` in data.interests.0 for type UserCreateInterestInput. Available args:

type UserCreateInterestsInput { 
 set?: List<String>
}

эта ошибка будет повторяться в зависимости от того, сколько элементов находится в массиве, например: Unknown arg '1' и так далее, такое же сообщение об ошибке, как мне это исправить?

2 ответа

Решение

Со мной случилось раньше, оказалось, это была ошибка запроса.

mutation {
  createFruit(data:{
    name: "Banana",
    images: {
      set: ["image_1.img", "image_2.img"]
    }
  }) {
    name
    images
  }
}

Обратите внимание, это не images: ["image_1.img", "image_2.img"]

Fyi с призмой вы можете сделать t.model.interest() при определении objectType

Вы должны предоставить список строк для set аргумент, например:

type UserCreateInterestsInput {
  set?: List<String>
}

Обратитесь к этому вопросу для получения дополнительной информации.

const Mutation = objectType({
  name: 'Mutation',
  definition(t) {
    t.field('register', {
      type: User,
      args: {
        data: arg({ type: RegisterInput }),
      },
      resolve: async (
        _root,
        { data: { password, interests, ...userData } },
        { prisma }
      ) => {
        const hashedPassword = await bcrypt.hash(password, 10);
        const user = await prisma.user.create({
          data: {
            ...userData,
            interests: {set: interests},
            password: hashedPassword,
          },
        });
        return user;
      },
    });

Надеюсь это поможет

Другие вопросы по тегам