Typeorm:如何按关系字段排序

Bud*_*get 17 typescript typeorm

我有一个 Singer 实体和一个相关的 Song 实体

歌手实体

export class Singer {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: string;

    @OneToMany( type => Song, Song => Song.user )
    songs: Song[];

}
Run Code Online (Sandbox Code Playgroud)

歌曲实体

export class Song {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: string;

    @ManyToOne( type => Singer, Singer => Singer.songs )
    singer: Singer;

}
Run Code Online (Sandbox Code Playgroud)

我想SongsSinger名称排序

我搜索了文档和 github 问题,但找不到答案我该如何解决?没有更好QueryBuilder

Sof*_*son 34

我认为没有查询构建器的 typeorm 目前不支持它,目前有一个功能请求打开

使用 QueryBuilder 非常简单:

connection.createQueryBuilder(Song, 'songs')
   .leftJoinAndSelect('songs.singer', 'singer')
   .orderBy('singer.name', 'ASC')
   .getMany();
Run Code Online (Sandbox Code Playgroud)


Sal*_* ED 14

我遇到了同样的问题,我尝试按自定义列排序,但没有查询生成器,因为我正在使用存储库,这是我的解决方案:

let res = await this.trackingRepository.findAndCount({
      where: [{ username : Like(`%${searchValue}%`) },
              { action : Like(`%${searchValue}%`) },
              { ip : Like(`%${searchValue}%`) }],
      order: {
        [sortField]: sortOrder === "descend" ? 'DESC' : 'ASC',
      },
      skip: (current - 1) * pageSize,
      take: pageSize,
    });
Run Code Online (Sandbox Code Playgroud)


Tam*_*lyn 9

从TypeORM 0.3.0开始支持这一点:

songRepository.find({
    order: {
        singer: {
            name: "ASC"
        }
    }
})
Run Code Online (Sandbox Code Playgroud)


Kig*_*lip 7

尝试实体模型上的默认顺序

https://github.com/typeorm/typeorm/blob/master/sample/sample30-default-order-by/entity/Post.ts

@Entity("sample30_post", {
    orderBy: {
        title: "ASC",
        id: "DESC"
    }
})
export class Post {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    title: string;

}
Run Code Online (Sandbox Code Playgroud)