在任何地方搜索 api prisma mysql
Search api prisma mysql where ANY
我正在尝试为我的项目实施搜索 api。但是,每当我有许多需要包含在查询中的变量时,我不确定如何完成这项任务。例如,我如何使用这段代码搜索任何字符?
jobs = await prisma.jobOffer.findMany({
where: {
OR: [
{
title: {
search: searchTerm?.replace(' ', ' | ') || undefined
}
},
{
description: {
search: searchTerm?.replace(' ', ' | ') || undefined
}
}
]
},
include: {
category: true,
company: true
}
})
更新:
如 docs 中所述,或 returns 如果未定义则无结果。另一方面,如果未定义,AND returns 所有结果,所以我采用了这种方法:
jobs = await prisma.jobOffer.findMany({
where: {
AND: [
{
OR: [
{
title: {
search: searchTerm?.replace(' ', ' | ') || undefined
}
},
{
description: {
search: searchTerm?.replace(' ', ' | ') || undefined
}
}
]
}
]
},
include: {
category: true,
company: true
}
})
你是正确的,如果 OR
运算符中的所有条件都未定义,那么你将不会得到任何结果 (docs)。我的印象是你在那里总是至少有一个条件,但现在我看到你正在使用一个搜索词来检查所有字段。在这种情况下,您可以检查 searchTerm
是否存在,然后使用 OR
运算符,例如:
jobs = await prisma.jobOffer.findMany({
// Such condition is to make TS happy, considering `type searchTerm = string | undefined`
where: !searchTerm ? undefined : {
OR: [
{
title: {
search: searchTerm.replace(' ', ' | '),
},
},
{
description: {
search: searchTerm.replace(' ', ' | '),
},
},
],
},
});
我正在尝试为我的项目实施搜索 api。但是,每当我有许多需要包含在查询中的变量时,我不确定如何完成这项任务。例如,我如何使用这段代码搜索任何字符?
jobs = await prisma.jobOffer.findMany({
where: {
OR: [
{
title: {
search: searchTerm?.replace(' ', ' | ') || undefined
}
},
{
description: {
search: searchTerm?.replace(' ', ' | ') || undefined
}
}
]
},
include: {
category: true,
company: true
}
})
更新: 如 docs 中所述,或 returns 如果未定义则无结果。另一方面,如果未定义,AND returns 所有结果,所以我采用了这种方法:
jobs = await prisma.jobOffer.findMany({
where: {
AND: [
{
OR: [
{
title: {
search: searchTerm?.replace(' ', ' | ') || undefined
}
},
{
description: {
search: searchTerm?.replace(' ', ' | ') || undefined
}
}
]
}
]
},
include: {
category: true,
company: true
}
})
你是正确的,如果 OR
运算符中的所有条件都未定义,那么你将不会得到任何结果 (docs)。我的印象是你在那里总是至少有一个条件,但现在我看到你正在使用一个搜索词来检查所有字段。在这种情况下,您可以检查 searchTerm
是否存在,然后使用 OR
运算符,例如:
jobs = await prisma.jobOffer.findMany({
// Such condition is to make TS happy, considering `type searchTerm = string | undefined`
where: !searchTerm ? undefined : {
OR: [
{
title: {
search: searchTerm.replace(' ', ' | '),
},
},
{
description: {
search: searchTerm.replace(' ', ' | '),
},
},
],
},
});