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
},
},
},
})
我是 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
},
},
},
})