使用带有多个联接的queryBuilder进行Typeorm查询

时间:2020-06-06 22:04:06

标签: sql database postgresql typeorm

对不起,如果问题的标题不完美,我不太确定该放在哪里。

我想在业余时间学习有关数据库的更多信息,所以目前我正在构建一个简单的应用程序,您应该可以在meetings上添加标签。我不是SQL专业人士,所以我使用Typeorm来帮助我,而且我也不是100%确定我的数据库结构是否是最好的。但是,这是我的布置方式:

我的桌子

  1. 会议
  2. MeetingTag
  3. 标签

我的想法是,会议可以有很多标签,而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和标签都被成功创建。

标签:

enter image description here MeetingTags:

enter image description here 但是我的问题是当我尝试通过标签查询会议时。我这样使用typeorm的createQueryBuilder

getConnection()
  .getRepository(Meeting)
  .createQueryBuilder("m")
  .innerJoinAndSelect(`m.meetingTags`, `meetingTag`)
  .leftJoinAndSelect("meetingTag.tag", "tag")
  .andWhere("tag.name IN (:...tagNames)", {
    tagNames: ["coding"],
  })

什么都不给我。我对此非常执着,非常感谢我能获得的所有帮助,如果需要更多信息,请告诉我。

感谢您抽出宝贵的时间阅读本文章。

干杯!

0 个答案:

没有答案