由于数组参数,Prisma 无法创建用户类型?

Posted

技术标签:

【中文标题】由于数组参数,Prisma 无法创建用户类型?【英文标题】:Prisma cannot create a user type because of array argument? 【发布时间】:2020-09-04 17:50:36 【问题描述】:

这是我在 schema.graphql 中的 InputType:

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>

该错误将根据数组中的项目数重复出现,例如:未知 arg '1' 等等,同样的错误消息,我该如何解决?

【问题讨论】:

【参考方案1】:

您必须向set 参数提供字符串列表,例如:

type UserCreateInterestsInput 
  set?: List<String>

请参阅此issue 了解更多信息。

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;
      ,
    );

希望对你有帮助

【讨论】:

【参考方案2】:

之前发生在我身上,原来是查询错误。

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

注意不是images: ["image_1.img", "image_2.img"]

你可以在定义 objectType 时使用 prisma t.model.interest()

【讨论】:

这是为使用t.crud方法的人准备的

以上是关于由于数组参数,Prisma 无法创建用户类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数组作为参数传递给 Nexus?如何使用 Prisma 从这个数组创建多个对象?

在单个解析器中一次创建两种类型的数据 (Graphql + Prisma)

prisma PANIC:无法在创建中找出 ID

GraphQL / Prisma 中的相同类型关系

创建记录时 Prisma typescript 类型错误

prisma2 在 prisma 模式中设置长度和列类型