【发布时间】:2022-02-20 00:21:28
【问题描述】:
我正在尝试为我的项目实施搜索 API。但是,当我有许多需要包含在查询中的变量时,我不确定如何完成此任务。例如,如何使用这段代码搜索任何字符?
jobs = await prisma.jobOffer.findMany({
where: {
OR: [
{
title: {
search: searchTerm?.replace(' ', ' | ') || undefined
}
},
{
description: {
search: searchTerm?.replace(' ', ' | ') || undefined
}
}
]
},
include: {
category: true,
company: true
}
})
更新: 如docs 中所述,如果未定义,OR 不返回任何结果。另一方面,如果未定义,AND 返回所有结果,所以我采用了这种方法:
jobs = await prisma.jobOffer.findMany({
where: {
AND: [
{
OR: [
{
title: {
search: searchTerm?.replace(' ', ' | ') || undefined
}
},
{
description: {
search: searchTerm?.replace(' ', ' | ') || undefined
}
}
]
}
]
},
include: {
category: true,
company: true
}
})
【问题讨论】:
-
搜索任意字符是什么意思?您想检查该字段是否包含某些内容?比如长度 > 0,还是什么?
-
如果 searchTerm 为空,则检索所有报价。我不想在查询之前执行此 IF 语句,因为我有一堆类似的变量,我想将它们放入查询中(例如按employmentType、salaryRange 搜索)。目前,如果 searchTerm 为空,则查询不会检索任何内容
-
然后只传递 undefined 而不是搜索?
-
所以当我通过 undefined 时我没有得到任何结果。如果我在这里通过 undefined,我想要所有工作机会,而不是 ANY
-
我刚刚尝试了类似的架构,它工作正常,如果你通过 undefined 那么你会得到所有未过滤的结果。所以也许你做错了什么
标签: next.js api-design prisma