我正在尝试创建一个 NestJS
findOne
服务方法,该方法采用 identifier
并返回带有 id
或 email
或 nickname
的第一个用户,即此标识符。
看起来像这样:
findOne(identifier: string) {
return this.prisma.user.findFirstOrThrow({
where: {
OR: [
{
id: identifier,
email: identifier,
nickname: identifier,
},
],
},
});
}
它没有返回结果,因为输出查询如下所示:
SELECT "public"."users"."id",
"public"."users"."firstName",
"public"."users"."lastName",
"public"."users"."email",
"public"."users"."nickname",
"public"."users"."createdAt",
"public"."users"."updatedAt"
FROM "public"."users"
WHERE (
"public"."users"."id" = $1
AND "public"."users"."email" = $2
AND "public"."users"."nickname" = $3
) LIMIT $4 OFFSET $5
如您所见,它应用了
AND
条件,而不是 OR
条件。
感谢您的帮助!
感谢@deceze 的帮助。 这个问题很容易解决。我有
indOne(identifier: string) {
return this.prisma.user.findFirstOrThrow({
where: {
OR: [
{
id: identifier,
email: identifier,
nickname: identifier,
},
],
},
});
}
必须替换为
findOne(identifier: string) {
return this.prisma.user.findFirstOrThrow({
where: {
OR: [
{
id: identifier,
},
{
email: identifier,
},
{
nickname: identifier,
},
],
},
});
}
因为
OR
在其数组中必须有多个项目。