NestJS-Prisma 如何使用关系字段创建记录?

NestJS-Prisma How to create record with relational fields?

我是 NestJS 和 Prisma 的初学者。

我正在尝试创建一个用户,我的 table 具有带 table 地址的关系字段。 要创建用户,我需要先在地址 table 中添加一个寄存器,以便在我的用户 table.

上使用 adress_id

我收到此错误:

这是我的代码

服务:

async create(createUserDto: CreateUserDto) {

    const hash = crypto.SHA256(createUserDto.password);
    const passwordHash = (hash.toString(crypto.enc.Hex).toUpperCase());

    const createCategory = await this.client.user.create({
      data: {
        name: createUserDto.name,
        email: createUserDto.email,
        age: createUserDto.age,
        password: passwordHash,
        roleId: createUserDto.roleId,
        address: {
          create: [
            {
              street: createUserDto.address.street,
              number: createUserDto.address.number,
              complement: createUserDto.address.complement,
              neighborhood: createUserDto.address.neighborhood,
              cityId: createUserDto.address.cityId,
              stateId: createUserDto.address.stateId,
              zipcode: createUserDto.address.zipcode
            },
          ],
        },
      },
    })
  }

DTO:

export class CreateUserDto {
    readonly id: number
    readonly name :string
    readonly age :any
    readonly email :any
    readonly password :any
    readonly roleId :any
    readonly addressId: number
    readonly address: {
        street: string,
        number: number,
        complement: string,
        neighborhood: string,
        cityId: number,
        stateId: number,
        zipcode: string
    }
}

Schema.prisma

model user {
  id        Int       @id @default(autoincrement())
  name      String
  age       Int
  email     String    @unique
  password  String
  roleId    Int
  role      role      @relation(fields: [roleId], references: [id])
  addressId Int
  address   addresses @relation(fields: [addressId], references: [id])
}

model addresses {
  id           Int    @id @default(autoincrement())
  street       String
  number       String
  complement   String
  neighborhood String
  cityId       Int
  city         cities @relation(fields: [cityId], references: [id])
  stateId      Int
  state        state  @relation(fields: [stateId], references: [id])
  zipcode      String
  user         user[]
}

我做错了什么? 谢谢!

您的 address.create 语法错误。 User-Address是one-to-many关系,一个用户只能有一个地址。所以 address.create 应该传递一个单一的 address 对象,而不是一个数组。

这应该可以正常工作

const createCategory = await this.client.user.create({
    data: {
        name: createUserDto.name,
        email: createUserDto.email,
        age: createUserDto.age,
        password: passwordHash,
        roleId: createUserDto.roleId,
        address: {
            create: {
                street: createUserDto.address.street,
                number: createUserDto.address.number,
                complement: createUserDto.address.complement,
                neighborhood: createUserDto.address.neighborhood,
                cityId: createUserDto.address.cityId,
                stateId: createUserDto.address.stateId,
                zipcode: createUserDto.address.zipcode
            },
        },
    },
})