如果我尝试创建一个不包含 RoomMember 的房间,一切都会按预期进行。但是,当我尝试使用 createRoomAction 创建成员时,遇到以下错误消息:
Invalid `prisma.roomMember.create()` invocation:
{
data: {
emailAddress: "[email protected]",
role: "admin",
name: "Said",
userId: "user_2eUSQ4tHpc5dlmeNpqhYu27k3gT",
roomId: "19058849-924f-4805-ba40-3c8513be5ed5",
~~~~~~
? id?: String,
? createdAt?: DateTime,
? updatedAt?: DateTime
}
}
Unknown argument `roomId`. Available options are marked with ?.
我的createRoomAction看起来像这样:
export async function createRoomAction(values: createAndEditRoomType): Promise<RoomType | null> {
const { id: userId, emailAddresses, firstName } = await authenticateAndRedirect();
const emailAddress = emailAddresses[0]?.emailAddress || "";
const AdminName = firstName || "";
try {
const room = await prisma.room.create({
data: {
...values,
clerkId: userId,
emailAddress: emailAddress
}
});
const admin = await prisma.roomMember.create({
data: {
emailAddress: emailAddress,
role: "admin",
name: AdminName,
userId,
roomId: room.id,
}
});
return room;
} catch (error) {
console.error("Fehler beim Erstellen des Admins:", error);
return null;
}
}
我的棱镜模式看起来像这样
model Room {
id String @id @db.Uuid @default(dbgenerated("gen_random_uuid()"))
name String
clerkId String
type String
controller String
autoRevealCards Boolean
showAveraging Boolean
emailAddress String
createdAt DateTime @default(dbgenerated("now()"))
updatedAt DateTime @updatedAt
roomMember RoomMember[]
}
model RoomMember{
id String @id @db.Uuid @default(dbgenerated("gen_random_uuid()"))
name String
emailAddress String
userId String
role Role
roomId String @db.Uuid
room Room @relation(fields: [roomId] , references: [id])
createdAt DateTime @default(dbgenerated("now()"))
updatedAt DateTime @updatedAt
}
我希望房间的创建者也是该房间的成员,并且每个房间都有多个成员,这意味着稍后我将为每个房间创建多个成员,并且它们应该连接到房间的 id。
我该如何解决这个问题?
为什么不使用“嵌套写入”而不是两个单独的插入?
const room = await prisma.room.create({
// Optional: include the room member in the response
include: {
roomMember: true,
},
data: {
name: 'Test Room',
// .. all the other fields
clerkId: userId,
emailAddress: emailAddress,
// Create a member and assign them to the room
roomMember: {
create: {
emailAddress,
name: adminName,
userId,
},
},
},
});