如何有条件地调用 "where" 子句?棱镜

How to call "where" clause conditionally? prisma

如何在prisma中有条件地过滤记录?例如,我有变量 sortByYear 可以包含 undefinedinteger.

我只想问下有没有办法重构下面的实现。我试过查看他们的 documentation,但找不到。

let result = [];

if (sortByYear) {
    result = await prisma.project.findMany({
        where: { provider_id: 50 }
    })
} else {
    result = await prisma.project.findMany()    
}

在 laravel 中,我们可以通过使用 when 子句重构它,该子句在执行查询之前首先检查变量。 laravel when-clause

您可以结合使用扩展语法运算和三元运算来完成此操作:

const result = await prisma.project.findMany({
  where: {
    ...(sortByYear ? { provider_id: 50 } : {}),
  },
});

传播语法:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

条件三元:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator