prisma findUnique where 只需要一个唯一的参数
prisma findUnique where takes only one unique argument
我 运行 遇到了一个问题,我需要通过用户名和电子邮件来检查用户是否存在,因为这两者都是数据库中的唯一字段,但我遇到了一个错误。
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,
},
});
我不是很确定,但是 prisma returns 一个 JS 对象...
所以也许像这样的查询应该有效:
const query = await prisma.user.findUnique({
where: {
user: user.username
},
select: {
user: true,
email: true
}
});
我相信这应该可行,但它仍然只能找到一个唯一的。我不确定为什么 select user + email 都是唯一的,因为我认为无论如何都与另一个相关联。
如果我的解决方案无法工作,我会在这里查看更多答案:https://www.prisma.io/docs/concepts/components/prisma-client/crud#findfirst
const users = await prisma.user.findMany({
where: {
OR: [
{username},
{email}
]
}
});
if (users.length !== 0) {...}
如果您正在寻找可以为您带来单一结果的唯一值,您也可以使用 findFirst。这会给你对象而不是数组。 findMany returns 一个数组,即使您正在寻找唯一值。
const users = await prisma.user.findFirst({
where: {OR: [{username},{email}]}
});
从逻辑上讲,email是一个唯一的字段(不会有两个人共享的相同的email)。用户名字段不是唯一的(多个用户具有相同的名称)。
仅以下代码就足以获取该唯一用户。
const user = await prisma.user.findUnique({
where: {
email
},
});
但我们假设电子邮件或用户名本身不是唯一的,电子邮件和用户名的组合是唯一的。
修改如下所示的架构
model user {
username : String
email : String
@@unique([username, email])
}
您现在可以通过唯一的电子邮件和用户名进行查询,而无需提供多个 where 参数
const user = await prisma.findUnique({
where: {
username_email : { username, email },
},
});
参考文献:
我 运行 遇到了一个问题,我需要通过用户名和电子邮件来检查用户是否存在,因为这两者都是数据库中的唯一字段,但我遇到了一个错误。
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,
},
});
我不是很确定,但是 prisma returns 一个 JS 对象... 所以也许像这样的查询应该有效:
const query = await prisma.user.findUnique({
where: {
user: user.username
},
select: {
user: true,
email: true
}
});
我相信这应该可行,但它仍然只能找到一个唯一的。我不确定为什么 select user + email 都是唯一的,因为我认为无论如何都与另一个相关联。
如果我的解决方案无法工作,我会在这里查看更多答案:https://www.prisma.io/docs/concepts/components/prisma-client/crud#findfirst
const users = await prisma.user.findMany({
where: {
OR: [
{username},
{email}
]
}
});
if (users.length !== 0) {...}
如果您正在寻找可以为您带来单一结果的唯一值,您也可以使用 findFirst。这会给你对象而不是数组。 findMany returns 一个数组,即使您正在寻找唯一值。
const users = await prisma.user.findFirst({
where: {OR: [{username},{email}]}
});
从逻辑上讲,email是一个唯一的字段(不会有两个人共享的相同的email)。用户名字段不是唯一的(多个用户具有相同的名称)。
仅以下代码就足以获取该唯一用户。
const user = await prisma.user.findUnique({
where: {
email
},
});
但我们假设电子邮件或用户名本身不是唯一的,电子邮件和用户名的组合是唯一的。
修改如下所示的架构
model user {
username : String
email : String
@@unique([username, email])
}
您现在可以通过唯一的电子邮件和用户名进行查询,而无需提供多个 where 参数
const user = await prisma.findUnique({
where: {
username_email : { username, email },
},
});
参考文献: