Prisma更新了多对多关系



我有两个表。CCD_ 1&CCD_ 2,其思想是每个成员可以参加0个或多个活动。每个事件可以有0个或多个成员。事件已经存在,代码应该根据成员的ID将事件添加到成员中。

模式模型:

model Member {
id             String   @id @default(uuid())
firstName      String
lastName       String
emailAddress   String
mobileNumber   String
whatsAppNumber String   @default("null")
password       String
createdAt      DateTime @default(now())
updatedAt      DateTime @updatedAt
events         Event[]
}
model Event {
id           String   @id @default(uuid())
name         String
date         DateTime
meetingPoint String
meetingTime  String
details      String
members      Member[]
}

问题是,我不知道如何将活动添加到现有成员中。在线资源也不起作用。

查询代码:

exports.registerForEvent = async (req, res, next) => {
try {
const { memberId, eventId } = req.body;
const _event = await prisma.event.findUnique({ where: { id: eventId } });
if (_event) {
const _member = await prisma.member.upsert({
where: { id: memberId },
update: {
events: _event,
},
});
if (_member) {
res.status(200).send("OK");
} else {
generateError("Failed", req, next);
}
}
} catch (err) {
generatDefaultError(err, req, next);
}
};

控制台错误:

PrismaClientValidationError:
Invalid `prisma.member.upsert()` invocation:
{
where: {
id: '40d00e11-cfe7-4707-8f19-0c13cd7e7fc7'
},
update: {
events: {
~~~~~~
id: '52294035-3a4e-431a-ae1c-b2f12525dc3e',
name: 'Event Name',
date: new Date('2021-01-14T20:00:00.000Z'),
meetingPoint: 'Meeting Point',
meetingTime: 'Meeting Time',
details: 'Event details'
}
},
+ create: MemberCreateInput | MemberUncheckedCreateInput
}
Unknown arg `events` in update.events for type MemberUncheckedUpdateInput. Did you mean `posts`?
Argument create is missing.
Note: Lines with + are required

我是Prisma的新手,正在努力了解它的工作原理。如有任何帮助,我们将不胜感激。

所以我设法通过大量的尝试和错误来解决这个问题。我想在这里发布答案,以防其他人正在寻找类似的解决方案:

这里的关键词是使用connect

工作代码:

exports.registerForEvent = async (req, res, next) => {
try {
const { memberId, eventId } = req.body;
// Find the event by it's ID
const _event = await prisma.event.findUnique({ where: { id: eventId } });
// Find the member by their ID
const _member = await prisma.member.update({
where: { id: memberId },
data: {
events: {
connect: [{ id: _event.id }], // connect that member with the event ID
},
},
});
if(_member) {
res.status(200).send("ok")
}
} catch (err) {
generatDefaultError(err, req, next);
}
};

最新更新