我如何编写一个Prisma findFirst,其中子句是OR的两个AND--或者Prisma如何处理未定义的子句?



我使用的是Prisma

我有一个postgres表,我想搜索,只找到匹配的记录(id和accessKey)或(id和ownerId)

如果accessKey或ownerId未定义,它会继续查找where (id)

我发现如果我使用不可能的字符串,那么搜索工作

我在prisma文档中找不到合适的答案,所以我想我应该在这里问

return await db.attendee.findFirst({
where: {
OR: [
{ AND: { id, ownerId } },
{ AND: { id, accessKey } },
]
}
})

如果accessKey或ownerId未定义,那么它们将从查询中有效地消失,这是有意义的

我使用这个,它的工作-值是guid的,所以他们永远不会匹配,但如果我的秘密短语松了(它在repo,而不是在一个env var),那么这将是一个类似于sql注入的漏洞…

const userId = context?.currentUser?.sub || `can't touch this`;
const accessKey = vaccessAuth?.accessKey || `can't touch this`;

还有什么比"棱镜方式">

?

根据我的理解,我们可以这样描述你的问题(如果我错了,请纠正我)。


查找第一个attendee
id字段匹配且(accessKeyownerId字段匹配)

试试这个:

return await prisma.attendee.findFirst({
where: {
OR: [
{ ownerId: ownerIdValue },
{ accessKey: accessKeyValue }
],
AND: { id: idValue }
}
});

相关内容

  • 没有找到相关文章

最新更新