【发布时间】: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