首页 > 解决方案 > 多对多与自定义列

问题描述

我对 Postgres(和 Typeorm)相当陌生,并且很难弄清楚如何处理以下场景:

这是我的架构:

// 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手动插入项目吗?在这种情况下,我需要先保存博客,这样我才能访问它idblogCategory. 我的印象是项目会自动创建。

提前感谢任何能够提供一些见解的人!

标签: postgresqlnestjstypeorm

解决方案


{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);
            });

推荐阅读