web-dev-qa-db-ja.com

Typeorm:リレーションフィールドで並べ替える方法

Singerエンティティと関連するSongエンティティがあります

歌手エンティティ

export class Singer {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: string;

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

}

曲のエンティティ

export class Song {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: string;

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

}

すべてのSongsSingerの名前で注文したい

ドキュメントとgithubの問題を検索しましたが、答えが見つかりません。どうすれば解決できますか? QueryBuilderなしでより良い

4
Budget

lodash のようなライブラリにタスクを委任してメモリ内で順序付けを行う場合は、クエリビルダーを使用する必要はありません。

この方法でも、EntityManagerまたはRepositoryを使用してデータをクエリできます。

// 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);

さらに読むために:

1
B12Toaster