在任何地方搜索 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(' ', ' | '),
            },
          },
        ],
      },
    });