postgresql - 多对多与自定义列
问题描述
我对 Postgres(和 Typeorm)相当陌生,并且很难弄清楚如何处理以下场景:
- 我有一个名为的表
blog
和一个名为 的表category
。博客可以属于很多类别,类别可以有很多博客。所以我相信我需要一个“多对多”的关系。 - 我的连接表需要有一个名为 的列
is_primary
,因此由于我需要一个额外的自定义列,我相信我需要为此创建自己的实体,而不是使用自动生成的实体。我打电话给这张桌子blogCategory
。当我需要将is_primary
标志设置为true时,我在这里遇到了如何处理保存的问题。
这是我的架构:
// blog.entity.ts omitting some fields for brevity
@Column()
@PrimaryGeneratedColumn()
id: number;
@Column()
title: string;
@OneToMany(() => BlogCategory, blogCategory => blogCategory.blog)
blogCategories: BlogCategory[];
// category.entity.ts
@Column()
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@OneToMany(() => BlogCategory, blogCategory => blogCategory.category)
blogCategories: BlogCategory[];
// blog-category.entity.ts
@PrimaryGeneratedColumn()
id: number;
@Column()
is_primary: boolean;
@Column()
categoryId: number;
@Column()
blogId: number;
@ManyToOne( () => Category, category => category.blogCategories )
category: Category
@ManyToOne( () => Blog, blog => blog.blogCategories )
blog: Blog
我认为这都是正确的,但如果我错了,请纠正我。但我现在被绊倒的部分是我实际处理博客插入的方式。我不确定is_primary
在必要时如何处理添加标志。我真的要blogCategory
手动插入项目吗?在这种情况下,我需要先保存博客,这样我才能访问它id
的blogCategory
. 我的印象是项目会自动创建。
提前感谢任何能够提供一些见解的人!
解决方案
{cascade: true}
您可以在实体关系中使用自动插入。检查这篇文章如何在 typeORM 中的 @ManyToMany 中保存关系
其他方式你可以使用事务来做到这一点。首先保存Blog
,获取博客,id
然后将项目添加到BlogCategory
查看https://typeorm.io/#/transactions
示例查看此伪代码,
await getManager().transaction(async transactionalEntityManager => {
const blog = await transactionalEntityManager.save(blogObject);
blogCategory.blogId = blog.id;
blogCategory.CategoryId = categoryId; // get categoryId from request body
await transactionalEntityManager.save(blogCategory);
});
推荐阅读
- javascript - 我可以在没有堆栈溢出的情况下使用异步函数进行无限递归吗
- sql - 范围触发器 - 雇员薪水
- reactjs - 如何正确分离组件中的功能?
- assembly - 如何调用一个程序并打印它?
- javascript - D3 Robinson 投影给出曲线纬度线
- python - Python:JSON 与 sqlite 的查询性能?
- javascript - 在外部单击时尝试隐藏模型具有不同的效果
- python - 如何将 Microsoft .docx 文件从 Angular 发送到 Python 后端而不破坏它?
- c# - 使用带有 include/then_include 的 linq 查询与使用带有连接和 gettng db 服务器错误的 sql 查询
- php - 我正在尝试使用 PHPmailer 发送电子邮件,但我收到此错误