【问题标题】:TypeGraphQL use TypeORM's findAndCount methodTypeGraphQL 使用 TypeORM 的 findAndCount 方法
【发布时间】:2019-06-22 19:50:49
【问题描述】:

我想使用TypeORMfindAndCount 函数返回Promise<[Entity[], number]> 进行分页。所以我有一个解析器:

offers(@Arg('page', { defaultValue: 1 }) page: number): Promise<[Offer[], number]> {
    const COUNT = 10
    return this.offerRepository.findAndCount({ take: COUNT, skip: (page - 1) * COUNT })
}

我也在使用type-graphql 并想用Query 注释来注释这个解析器,如下所示:

@Query(returns => ???)

但是我无法确定返回类型,我尝试了这个(当然没有用,因为 findAndCount 返回的内容):

@ObjectType()
class TestType {
    @Field(type => [Offer])
    offers: Offer[]

    @Field()
    count: number
}

并尝试像这样使用它:@Query(returns =&gt; [TestType]) 和这个@Query(returns =&gt; TestType)

【问题讨论】:

    标签: typescript pagination typeorm typegraphql


    【解决方案1】:

    GraphQL 不支持元组,因此需要创建响应对象类型:

    @ObjectType()
    class OffersResponse {
      @Field(type => [Offer])
      items: Offer[]
    
      @Field(type => Int)
      totalCount: number
    }
    

    然后手动将元组映射到对象:

    @Query(returns => OffersResponse)
    offers(@Arg('page', { defaultValue: 1 }) page: number): Promise<OffersResponse> {
        const COUNT = 10
        const [items, totalCount] = await this.offerRepository.findAndCount(
          { take: COUNT, skip: (page - 1) * COUNT }
        )
        return { items, totalCount }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2022-06-28
      • 2021-01-01
      • 2021-08-14
      • 1970-01-01
      • 2023-02-13
      • 2021-08-11
      • 2021-12-04
      • 2021-08-04
      • 1970-01-01
      相关资源
      最近更新 更多