【问题标题】:Prisma Queries with conditions带条件的 Prisma 查询
【发布时间】:2020-12-18 01:07:12
【问题描述】:

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

假设我想在特定条件下向查询添加包含或位置条件。 我现在应该为此使用新方法吗?像第二个 API 获取路径 /api/users/with-include/api/users/condition1

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

Prisma 2 query to return records only that are associated with ALL of the provided tag IDs

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

这里的最佳做法是什么?

【问题讨论】:

    标签: prisma prisma2


    【解决方案1】:

    既然你可以有很多条件,这是否意味着你会为不同的条件制作很多端点?起初,您可能很想这样做,但这变得不灵活。

    对于给定的端点,您可以在 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 或根据您的需要进行任何自定义。

    【讨论】:

      猜你喜欢
      • 2022-08-21
      • 2022-12-02
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      • 2014-05-16
      • 2013-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多