【问题标题】:TypeORM - Get data from many-to-many relationshipTypeORM - 从多对多关系中获取数据
【发布时间】:2022-04-05 20:03:23
【问题描述】:

我有 2 个表(新闻、标签),它们的关系如下:

  • 1 条新闻可以有多个标签
  • 1个标签可以属于多条新闻

这就是我实现他们关系的方式:

新闻:

@Entity({ name: "news" })
export  class News extends Serializable {
  @PrimaryGeneratedColumn('increment')
  news_id: number;

  @Column({name: "title", type: "varchar", length: 300})
  title: string;

  @Column({name: "content", type: "varchar", length: 5000})
  content: string;

  @Column({name: "create_date"})
  create_date: Date;

  @ManyToMany(() => Tags)
  @JoinTable()
  tagsnews: Tags[]
} 

标签:

@Entity({ name: "tags" })
export  class Tags extends Serializable {
  @PrimaryGeneratedColumn('increment')
  tag_id: number;

  @Column({name: "name", type: "varchar", length: 300})
  name: string;
} 

使用 ManyToMany 将创建一个表 'news_tagsnews_tags' 存储如下数据:

一切正常,但当我想获取新闻数据及其标签时:

dataObject = await getRepository(News).createQueryBuilder("news")
.leftJoinAndSelect("news.tagsnews", "tags") 
.where("news.news_id = :newsid", {newsid: params.news_id})
.getRawMany();

结果返回多行而不是 1 行,就像这样:

  RowDataPacket {
    news_news_id: 1,
    news_title: 'Essence of Paris 1',
    news_create_date: 2021-10-08T04:58:31.000Z,
    tags_tag_id: 3,
    tags_name: 'france',
  },
  RowDataPacket {
    news_news_id: 1,
    news_title: 'Essence of Paris 1',
    news_create_date: 2021-10-08T04:58:31.000Z,
    tags_tag_id: 3,
    tags_name: 'travel',
  },
  RowDataPacket {
    news_news_id: 1,
    news_title: 'Essence of Paris 1',
    news_create_date: 2021-10-08T04:58:31.000Z,
    tags_tag_id: 3,
    tags_name: 'beautiful',
  }
]

我想要的是这样的:

  RowDataPacket {
    news_news_id: 1,
    news_title: 'Essence of Paris 1',
    news_create_date: 2021-10-08T04:58:31.000Z,
    tags_tag_id: 3,
    tags: [{
        tag_id: 1,
        tag_name: france
        }, {
        tag_id: 2,
        tag_name: travel
        }, {
        tag_id: 3,
        tag_name: beautiful
        }
    ]
  }
]

我更改为getRawOne(),但它根本没有帮助,它只返回 1 条第一条记录。有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: node.js typescript typeorm


    【解决方案1】:

    尝试使用getMany() 而不是.getRawMany(),它对我有用!

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 2020-06-29
    • 2020-10-04
    相关资源
    最近更新 更多