【问题标题】:Many-to-many with custom column多对多与自定义列
【发布时间】:2021-07-19 04:54:37
【问题描述】:

我对 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。我有点印象是项目会自动创建。

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

【问题讨论】:

    标签: postgresql nestjs typeorm


    【解决方案1】:

    您可以在实体关系中使用{cascade: true} 实现自动插入。查看此帖子How to save relation in @ManyToMany in typeORM

    您可以通过其他方式使用事务来做到这一点。 首先保存Blog,获取博客id,然后将项目添加到BlogCategoryhttps://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);
                });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      相关资源
      最近更新 更多