TypeORM: Как реализовать один-ко-многим в нетипичной ситуации?
Я разрабатываю приложение на NestJS. В нем как и пользователи (User), так и сообщества (Public) могут создавать статьи (Article).
Вот примерный код:
class ArticleEntity {
@PrimaryGeneratedColumn()
id: number;
}
class User {
@PrimaryGeneratedColumn()
id: number;
}
class Public {
@PrimaryGeneratedColumn()
id: number;
}
И проблема в том, что я не могу задать между ними связь. Пытался через ManyToMany в User и Public, но решение мне показалось костыльным. Есть ли более красивое и лаконичное решение? Заранее благодарю
Ответы (1 шт):
Ситуация вполне типичная, поэтому например так:
class ArticleEntity {
@ManyToOne(() => User, user => user.articles, {nullable: true})
user: User;
@ManyToOne(() => Public, public_ => public_.articles, {nullable: true})
public_: Public;
}
class User {
@OneToMany(() => ArticleEntity, art => art.user)
@JoinColumn()
articles: ArticleEntity[];
}
class Public {
@OneToMany(() => ArticleEntity, art => art.public_)
@JoinColumn()
articles: ArticleEntity[];
}
Здесь внешние колонки на статьи будут созданы в таблицах User и Public, соответственно, а в самой ArticleEntity соответствующие поля будут заполняться при выполнении запросов (надо указать либо, eager = true в опциях связи, либо relations при запросе, и так далее, что верно и при работе с таблицами User и Public)