Prisma 查找多个请求并计入一个请求

SPR*_*1NG 7 javascript backend prisma

我的类别服务中有一个分页,我必须返回 obj 以及类别和数据的总数

但可能有一些参数。例如,我应该返回由特定用户创建的类别:

async findAll(
    { onlyParents }: ParamsCategoryDto,
    user: ITokenPayload | undefined,
): Promise<IFilterRes> {
    const categories = await this.prisma.category.findMany({
      where: {
        user_id: user?.id,
      },
    });

    return {
      pagination: {
        total: this.prisma.category.count({
          where: { // <- duplicate
          user_id: user?.id,
        },
      }),
    },
    data: categories,
  };
}
Run Code Online (Sandbox Code Playgroud)

我应该在两个查询中复制where 。这不太好。是否有任何选项可以在一个请求中完成此操作。

PS我可以为where做一些var,但这样我就失去了典型化,我也不喜欢这一点。

Hoà*_*ánh 15

这是我的示例代码,通过单个事务实现它,没有重复的代码并且不会丢失类型自动完成

import { Prisma } from '@prisma/client';
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()

const findAll = async (userId: String) => {
  const query: Prisma.categoriesFindManyArgs = {
    where: {
      user_id: userId,
    }
  };
  const [categories, count] = await prisma.$transaction([
    prisma.categories.findMany(query),
    prisma.categories.count({ where: query.where })
  ]);

  return {
    pagination: {
      total: count
    },
    data: categories
  };
};

Run Code Online (Sandbox Code Playgroud)