有没有办法通过一个查询获得总计数和记录,而不是作为两个单独的查询运行?

如果不可能,有没有办法在两个查询中重用where条件?

async findAll(query): Promise<Paginate> {
  const take = query.take || 10
  const skip = query.skip || 0
  const keyword = query.keyword || ''

  const builder = this.userRepository.createQueryBuilder("user")
  const total = await builder.where("user.name like :name", { name: '%' + keyword + '%' }).getCount()
  const data = await builder.where("user.name like :name", { name: '%' + keyword + '%' }).orderBy('name', 'DESC').skip(skip).take(take).getMany();

  return {
    data: data,
    count: total
  }
}

{
  count: 10,
  data: [
    {
      id: 1,
      name: 'David'
    },
    {
      id: 2,
      name: 'Alex'
    }]
}

推荐答案

你可以在这project本书中找到一些很好的例子.简而言之,typeorm有一个非常好的方法专门用于这个用例findAndCount.

async findAll(query): Promise<Paginate> {
    const take = query.take || 10
    const skip = query.skip || 0
    const keyword = query.keyword || ''

    const [result, total] = await this.userRepository.findAndCount(
        {
            where: { name: Like('%' + keyword + '%') }, order: { name: "DESC" },
            take: take,
            skip: skip
        }
    );

    return {
        data: result,
        count: total
    }
}

你可以找到here个存储库API.关于Repository类的更多文档可以在here中找到.

Typescript相关问答推荐

之间是否有区别:例如useEffect()React.useEffect()

TypScript如何在 struct 上定义基元类型?

类型安全JSON解析

如何在TypeScript对象迭代中根据键推断值类型?

为什么typescript要把这个空合并转换成三元?

如何设置绝对路径和相对路径的类型?

获取一个TypeScrip对象,并将每个属性转换为独立对象的联合

Angular文件上传到Spring Boot失败,多部分边界拒绝

笛卡尔产品类型

(TypeScript)TypeError:无法读取未定义的属性(正在读取映射)"

转换器不需要的类型交集

带投掷的收窄类型

react 路由不响应参数

TypeScrip:使用Cypress测试包含插槽的Vue3组件

仅当类型为联合类型时映射属性类型

类型脚本中函数重载中的类型推断问题

我可以使用JsDocs来澄清Typescript实用程序类型吗?

如何在TypeScript类成员函数中使用筛选后的keyof this?

为什么我会得到一个;并不是所有的代码路径都返回一个值0;switch 中的所有情况何时返回或抛出?(来自vsCode/TypeScript)

如何使用 Angular 确定给定值是否与应用程序中特定单选按钮的值匹配?