【发布时间】:2019-11-07 17:32:46
【问题描述】:
我创建了一个“文档”实体:
例如
@Entity()
export class Document {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
path: string;
...
}
多个文档可以关联不同的实体类型:post、userProfile等
例如,在 post 实体中,我有几个字段都指定了文档关系。
@OneToOne(type => DocumentEntity)
@JoinColumn({ name: 'default_document' })
defaultDocument: DocumentEntity;
@OneToOne(type => DocumentEntity)
@JoinColumn({ name: 'featured_document' })
featuredDocument: DocumentEntity;
@OneToMany(type => DocumentEntity, document => document.post)
@JoinColumn({ name: 'other_documents' })
otherDocs: DocumentEntity[];
我不清楚如何使文档关系成为双向的。 我曾希望在文档上有一个字段,例如:
@ManyToOne(type => abstractEntity, entity => entity.document)
parentEntity: abstractEntity;
这样,如果我要查询文档实体的父关系, 我会得到如下结果:
documents: [
{
id: 1,
name: 'document 1',
path: 'https://image.hosted.service/1.jpg',
parentEntityId: 23
},
{
id: 2
name: 'document 2',
path: 'https://image.hosted.service/2.jpg'
parentEntityId: 27
}
]
但 Typeorm 似乎希望我为 documentEntity 上的每个父关系字段定义一个完全匹配的字段,例如:
@Entity()
export class Document {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
path: string;
...
@OneToOne(type => PostEntity, post => post.defaultDocument)
postEntityDefaultDoc: PostEntity;
@OneToOne(type => PostEntity, post => post.featuredDocument)
postEntityFeaturedDoc: PostEntity;
@ManyToOne(type => PostEntity, post => post.otherDocs)
otherDocs: PostEntity[];
}
为了简单起见,本示例中没有 M:N 关系:文档最多可以有一个父级。
对于父实体字段引用文档的每个可能实例,我必须在文档实体上定义一个新字段似乎不正确。 对文档的查询不会返回包含一个定义父实体的字段的列表,而是我必须解析/聚合任意数量的字段。
我似乎找不到任何教程/示例,其中单个实体具有多个字段,每个字段都引用相同的其他实体,这让我认为我的基本方法存在缺陷。
【问题讨论】:
-
你找到解决方案了吗?
-
我没有。我得出的结论是,它需要一个完整的其他连接表,我需要保持更新,这似乎很尴尬。我只通过其父实体查询文档。如果我要显示完整的文档列表,我会通过查询所有可以支持文档的实体来完成。我得出结论,这对于我的用例来说已经足够了。
标签: one-to-many erd typeorm