对不起,如果问题的标题不完美,我不太确定该放在哪里。
我想在业余时间学习有关数据库的更多信息,所以目前我正在构建一个简单的应用程序,您应该可以在meetings
上添加标签。我不是SQL专业人士,所以我使用Typeorm来帮助我,而且我也不是100%确定我的数据库结构是否是最好的。但是,这是我的布置方式:
我的桌子
我的想法是,会议可以有很多标签,而MeetingTag是Meeting和Tag之间的“桥梁”(这可能是一个不错的SQL术语)。我将实体放在下面,并尝试仅显示重要内容。
我的实体
Meeting.ts:
@ManyToMany(() => MeetingTag)
@JoinTable()
meetingTags: MeetingTag[];
MeetingTag.ts
export class MeetingTag extends BaseEntity {
@PrimaryColumn()
meetingId: number;
@PrimaryColumn()
tagId: number;
@Field(() => Tag)
@ManyToOne(
() => Tag,
(tag) => tag.tagsForMeetings,
{ primary: true }
)
@JoinColumn({ name: "tagId" })
tag: Tag;
@Field(() => Meeting)
@ManyToOne(
() => Meeting,
(meeting) => meeting.meetingTags,
{
primary: true,
}
)
@JoinColumn({ name: "meetingId" })
meeting: Meeting;
}
Tag.ts
@OneToMany(
() => MeetingTag,
(meetingTag) => meetingTag.tag
)
tagsForMeetings: MeetingTag[];
当我使用标签创建新的会议时,MeetingTags和标签都被成功创建。
标签:
但是我的问题是当我尝试通过标签查询会议时。我这样使用typeorm的createQueryBuilder
,
getConnection()
.getRepository(Meeting)
.createQueryBuilder("m")
.innerJoinAndSelect(`m.meetingTags`, `meetingTag`)
.leftJoinAndSelect("meetingTag.tag", "tag")
.andWhere("tag.name IN (:...tagNames)", {
tagNames: ["coding"],
})
什么都不给我。我对此非常执着,非常感谢我能获得的所有帮助,如果需要更多信息,请告诉我。
感谢您抽出宝贵的时间阅读本文章。
干杯!