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