Наследование отдельных таблиц с базовым классом таргетинга отношений в TypeORM - PullRequest
0 голосов
/ 01 октября 2019

В моем приложении я хочу, чтобы у пользователя были элементы уведомлений (новости) другого типа. User и NewsItem должны иметь отношение один ко многим, но также, NewsItem - это просто базовый класс для различных типов фактических новостей.

Вот мой базовый NewsItem класс:

@Entity()
@TableInheritance({ column: { type: "varchar", name: "type"}})
export class NewsItem {

    @PrimaryGeneratedColumn()
    id: number;

    @ManyToOne(type => User, user => user.news)
    receiver: Promise<User>;

}

Вот User, к которому он прикреплен:

@Entity()
export class User {

    @PrimaryGeneratedColumn()
    id: number;

    // (a lot of irrelevant stuff removed)

    @OneToMany(type => NewsItem, newsItem => newsItem.receiver)
    news: Promise<NewsItem[]>;

}

А вот пример конкретного элемента новостей:

@ChildEntity()
export class ConcreteNewsItem extends NewsItem {

    @Column()
    someData: number;
}

Все это кажется простымдостаточно из документации. Однако вот что я не получаю: как мне пройти news пользователя, проверить, какой именно тип каждого из них, и получить объект конкретного типа новостного элемента для каждого из них?

Насколько я понимаю, TypeORM создаст столбец с именем type в определении SQL таблицы news_item, но этот столбец недоступен в самом классе NewsItem, и я не могу понять, какпостроить запрос, который бы на самом деле дал мне ConcreteNewsItem объектов!

...