首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeORM:如何按关系字段排序

TypeORM:如何按关系字段排序
EN

Stack Overflow用户
提问于 2019-09-10 13:30:33
回答 8查看 98.1K关注 0票数 38

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

Singer 实体

代码语言:javascript
复制
export class Singer {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: string;

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

}

Song 实体

代码语言:javascript
复制
export class Song {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: string;

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

}

我想要所有的Songs都用Singer的名字来订购

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

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2019-09-12 13:39:02

在TypeORM版本0.3.0中,您可以执行以下操作:

代码语言:javascript
复制
repository.find({
    order: {
        singer: {
            name: "ASC"
        }
    }
})

在0.3.0版之前(原始响应)

我认为没有查询生成器的typeorm目前不支持它,目前有一个特征请求打开

但是,对于QueryBuilder,它非常简单:

代码语言:javascript
复制
connection.createQueryBuilder(Song, 'songs')
   .leftJoinAndSelect('songs.singer', 'singer')
   .orderBy('singer.name', 'ASC')
   .getMany();
票数 70
EN

Stack Overflow用户

发布于 2021-04-26 09:22:12

我的问题与我试图按自定义列订购的问题相同,但没有查询生成器,因为我使用的是Repository,这是我的解决方案:

代码语言:javascript
复制
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,
    });
票数 13
EN

Stack Overflow用户

发布于 2022-04-01 11:42:04

这在TypeORM 0.3.0中是支持的

代码语言:javascript
复制
songRepository.find({
    order: {
        singer: {
            name: "ASC"
        }
    }
})
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57871918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档