为什么 Prisma 将我的“或”条件转换为“和”条件? [关闭]

问题描述 投票:0回答:1

我正在尝试创建一个 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
条件。

感谢您的帮助!

postgresql nestjs prisma
1个回答
0
投票

感谢@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
在其数组中必须有多个项目。

© www.soinside.com 2019 - 2024. All rights reserved.