web-dev-qa-db-fra.com

Typeorm: Comment commander par un champ de relation

J'ai une entité Singer et une entité Song associée

entité chanteuse

export class Singer {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: string;

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

}

entité Song

export class Song {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: string;

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

}

Je veux obtenir tous les Songs classés par Singer nom

J'ai cherché dans les documents et les problèmes de github mais je ne trouve pas de réponse Comment puis-je résoudre ce problème? mieux sans QueryBuilder

4
Budget

Vous n'êtes pas obligé d'utiliser le générateur de requêtes si vous êtes prêt à effectuer la commande en mémoire en déléguant la tâche à une bibliothèque comme lodash .

De cette façon, vous pouvez toujours utiliser le EntityManager ou un Repository pour interroger les données.

// first fetch the song and include (=join) the
// singer by the foreign key "singer"
var queryResult = await this.entityManager.find(Song, {
  relations: ['singer'],
});

// then use a library like lodash to do the ordering
const songsSortedBySinger = _.orderBy(queryResult, song => song.singer.name);

Pour en savoir plus:

1
B12Toaster