TypeORM - 第三个关系表

问题描述 投票:0回答:1

目标很简单。我有一个由自托管 Strapi CMS 创建的表,我通过 NestJS 后端连接到该表。通过这种方法,我希望继续在同一个数据库中工作,而不需要对 Strapi 进行额外的 API 调用。感兴趣的表的结构如下所示:

@Entity({ name: 'posts' })
export class PostEntity {
  @PrimaryGeneratedColumn()
  id!: number;

  ???
  category!: CategoryEntity;
}

@Entity({ name: 'categories' })
export class CategoryEntity {
  @PrimaryGeneratedColumn()
  id!: number;

  ???
  posts!: PostEntity[];
}

@Entity('posts_category_links')
export class PostCategoryLinkEntity {
  @PrimaryGeneratedColumn()
  id!: number;

  @Column({ name: 'post_order' })
  postOrder!: number

  ???
  categoryId!: number;

  ???
  postId!: number;
}

第三个表保存两个实体的 ID。

条件:

  • 数据库同步设置为 false,如果在其外部修改表,Strapi 可能会中断

目标:

  • 以下代码应返回类别键中包含 CategoryEntity 的所有帖子:

    this.postsRepository.find({关系: ['类别']})

database postgresql nestjs typeorm strapi
1个回答
0
投票

试试这个:

@Entity({ name: 'posts' })
export class PostEntity {
  @PrimaryGeneratedColumn()
  id!: number;

  @OneToOne(() => CategoryEntity, (item) => item.Category, { })
  category!: CategoryEntity;
}

@Entity({ name: 'categories' })
export class CategoryEntity {
  @PrimaryGeneratedColumn()
  id!: number;

  @OneToMany(() => PostEntity, (item) => item.Post)
  posts!: PostEntity[];
}

@Entity('posts_category_links')
export class PostCategoryLinkEntity {
  @PrimaryGeneratedColumn()
  id!: number;

  @Column({ name: 'post_order' })
  postOrder!: number

  @Column({ nullable: false })
  categoryId!: number;
  
  @OneToOne(() => CategoryEntity, { nullable: false })
  @JoinColumn({ name: "categoryId", foreignKeyConstraintName: "category_fk" })
  Category: CategoryEntity;

  @Column({ nullable: false })
  postId!: number;

  @ManyToOne(() => PostEntity, (post) => post.id, { nullable: false })
  @JoinColumn({ name: "postId", foreignKeyConstraintName: "post_fk" })
  Post: PostEntity;
}

但是,也许您需要应用关系

OneToMany
category!: CategoryEntity[];

© www.soinside.com 2019 - 2024. All rights reserved.