【问题标题】:prisma findUnique where takes only one unique argumentprisma findUnique 只接受一个唯一参数
【发布时间】:2021-05-05 23:34:36
【问题描述】:

我遇到了一个问题,我需要通过用户名和电子邮件检查用户是否存在,因为两者都是数据库中的唯一字段,但我收到了错误。 Argument where of type UserWhereUniqueInput needs exactly one argument, but you provided username and email. Please choose one. 那么,有没有办法只执行一次这个查询?而不是像下面这样为每个运行一个

const user = await prisma.user.findUnique({
        where: {
          username,
          email,
        },
      });

不是这样的

const user = await prisma.user.findUnique({
        where: {
          username,
        },
      });

const user = await prisma.user.findUnique({
        where: {
          email,
        },
      });

【问题讨论】:

  • usernameemail 在您的 User 模型上是必需的,还是在 Prisma 架构中使用 ? 标记为可选?

标签: prisma prisma-graphql prisma2


【解决方案1】:

如果您正在寻找可以为您带来单一结果的唯一值,您也可以使用 findFirst。这会给你对象而不是数组。即使您正在寻找一个唯一值,findMany 也会返回一个数组。

const users = await prisma.user.findFirst({
 where: {OR: [{username},{email}]}
});

【讨论】:

    【解决方案2】:
    const users = await prisma.user.findMany({
           where: {
            OR: [
              {username},
              {email}
            ]
          }
      });
     if (users.length !== 0) {...}
    

    【讨论】:

      【解决方案3】:

      我不完全确定,但是 prisma 返回一个 JS 对象... 所以也许这样的查询应该有效:

      const query = await prisma.user.findUnique({
              where: {
                user: user.username
              },
             select: {
               user: true,
               email: true
            }
            });
      

      我相信这应该可行,但它仍然只能找到一个唯一的。我不确定您为什么会选择用户 + 电子邮件作为唯一的,因为我会假设一个无论如何都与另一个相关联。

      如果我的解决方案无法正常工作,我会在这里查看更多答案:https://www.prisma.io/docs/concepts/components/prisma-client/crud#findfirst

      【讨论】:

      • 来自 Prisma 团队的 Nikolas。我不认为select 有什么不同,但这是关键:“我不确定你为什么会选择用户 + 电子邮件作为唯一的,因为我认为一个无论如何都与另一个相关联。”由于idemail 都已经是唯一属性,因此在findUnique 查询中同时提供这两个属性没有任何意义。 @ahmdtalat 您应该可以只使用其中一个并获得相同的结果。
      猜你喜欢
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多