在Prisma中执行此关系"交易"的更好方法



我昨天发布了一个问题,其中包含相关的prisma模式,可以在这里找到。

作为后续问题,当成员创建新的Organization时,我希望它成为他们选择的Membership。我找到的唯一方法是取消选择他们当前的Memebership(将其设置为null(,执行create,然后在create不起作用的情况下恢复关系。在没有selectedMembership的情况下,我必须使用updateMany进行初始操作。是这样吗?

//Deselect the currently selected Org
const updatedMembership = await prisma.membership.updateMany({
where: {
selectedById: user.id
},
data: {
selectedById: null
}
});
if (updatedMembership) {
//Select the new one.
const result = await prisma.organization.create({
data: {
name: body.name,
members: {
create: [{
role: MemberRole.OWNER,
userId: user.id,
selectedById: user.id
}]
}
},
});
if (result) {
res.status(200)
.json(result);
} else {
//Restore the previously selected one if the create failed
if(user.selectedMembership) {
await prisma.membership.update({
where: {
id: user.selectedMembership?.id
},
data: {
selectedById: user.id
}
});
}
res.status(500).end();
}
}

您可以使用connectAPI在单个查询中完成所有这些操作。只要确保user.id是有效的。

以下是您的问题中创建和更新查询逻辑的一个更干净的版本:

const result = await prisma.organization.create({
data: {
name: body.name,
members: { 
create: {  
role: MemberRole.OWNER,
user: {
connect: {
id: user.id,  // making the user a member of the organization
},
},
selectedBy: {
connect: {
id: user.id,  // selecting the newly created membership as the user's default organization
},
},
},
},
},
});

这将处理所有情况,无论userid = user.id当前是否:

  • 是其他组织的成员,默认拥有其他成员资格
  • 是其他组织的成员,但没有默认成员资格
  • 不是任何组织的成员,也没有默认成员资格

最新更新