带条件的 Prisma 查询

Prisma Queries with conditions

我目前正在使用 Prisma 构建一个新项目,我正在考虑当我有不同的依赖项时如何构建我的 SQL 查询。

假设我想在某个条件下为查询添加一个include或一个where条件。 我现在应该为此使用新方法吗?喜欢秒API获取路径/api/users/with-include分别/api/users/condition1

或者我应该按照此处的建议使用 if 查询扩展现有方法吗?

并分别使用一个查询参数/api/users?with-include=true/api/users?condition1=true

这里的最佳做法是什么?

既然你可以有很多条件,这是否意味着你会为不同的条件创建很多端点?一开始,您可能很想这样做,但那会变得不灵活。

对于给定的端点,您可以在 GET(或正文,如果使用 POST)的查询参数中基于过滤器查询数据,例如 where、include、limit、order 等。

休息

/api/users?filter[where][gender]=male&filter[take]=10

或字符串化JSON格式:

/api/users?filter={"where":{"gender":"male"},"take":10}

通过上面的例子,你可以进行灵活的查询,你可以直接使用这个 filter 查询对象到你的 Prisma 查询中,假设你已经用那种方式制作了它(上面的例子是)。

但我建议不要直接使用它,因为任何人都可以操纵查询参数值。例如,有人将 take 的值从 10 更改为 200。您不会希望这样。因此,在这种情况下,您需要通过执行检查来设置限制:

const filter = getQueryObjectFromURL();

if( filter.where.take > 100 ) {
  filter.where.take = 100;
}

最后,您可以在 Prisma 中使用 filter,例如:

await prisma.users.findMany(filter);

但如果条件较少,并且您不想要这种级别的过滤器,那么您可以根据条件进行自定义查询。

api/users?gender=male

const { gender } = getQueryObjectFromURL();

const filter = {
   where: {}
};


if(gender){
  filter.where.gender = gender; // You might want to check for values before doing this because gender=skdjshdf can be passed
}

您可以传递任意数量的查询参数,但您只检查是否存在您的案例所需的参数。如果它存在并且有效,请将其添加到您的过滤器或忽略它。

如果有很多条件 (condition2, condition3, ...),您知道它将用于什么,因此它可以相应地用于,例如,准备 AND 或 OR 或根据您的需要自定义根据您的需要。