首页 > 解决方案 > Typeorm:分页关系

问题描述

我有这两个实体:

@Entity()
@Unique(["userName"])
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  @Length(4, 20)
  userName: string;

  @ManyToMany(type => League, league => league.members)
  leagues: League[];

}
@Entity()
export class League {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  @Length(3, 50)
  name: string;

  @Column()
  @Length(0, 200)
  description: string;

  @Column()
  @Length(4, 20)
  country: string;

  @ManyToMany(type => User)
  @JoinTable()
  members: User[];
}

但是一个联盟可以有许多成员,因此将一个联盟的所有成员召集到一个电话中并不是最佳选择。是否可以对联盟成员之间的关系进行分页?

我的模型错了吗?

我正在使用 typeorm@^0.2.24 和带有打字稿的 nodejs

标签: node.jspostgresqltypescripttypeorm

解决方案


find在使用来自一个实体的方法时,目前不支持仅对关系进行分页。在这种情况下,只需使用QueryBuilder. 您可以在此处查看 QueryBuilder 文档

因此,在这种情况下,您可以使用:

// This will be paginated
const leagueMembers = await connection
    .createQueryBuilder(User, "user")
    .leftJoin("user.leagues", "league", "league.id = :leagueId"; { leagueId })
    .orderBy("user.id")
    .skip(..)
    .take(..)
    .getMany();

推荐阅读