typescript - TypeORM: Hur man sorterar efter ett relationsfält


Jag har en Singer-entitet och en relaterad Song-entitet

Sångare-entitet

export class Singer {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: string;

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

}

Sång-entitet

export class Song {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: string;

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

}

Jag vill hämta alla Songs sorterade efter Singer-namn

Jag sökte i dokumentationen och GitHub-ärendena men kan inte hitta ett svar. Hur kan jag lösa detta? Helst utan QueryBuilder.

Svar #1

Från och med TypeORM version 0.3.0 kan du göra följande:

repository.find({
    order: {
        singer: {
            name: "ASC"
        }
    }
})

Innan version 0.3.0 (ursprungligt svar)

Jag tror inte att det för närvarande stöds av typeorm utan frågebyggaren, det finns för närvarande en funktionsförfrågan öppen

Med QueryBuilder är det dock ganska enkelt:

connection.createQueryBuilder(Song, 'songs')
   .leftJoinAndSelect('songs.singer', 'singer')
   .orderBy('singer.name', 'ASC')
   .getMany();

Svar #2

Jag hade samma problem, jag försökte sortera efter en anpassad kolumn men utan query builder eftersom jag använde Repository, detta är min lösning:

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,
    });

Relaterade artiklar