我正在与Nest.js,Typeorm和PostgreSQL一起工作,我有两个实体(产品和石头),并根据我自己的业务项目,有很多与许多关系,我必须向许多额外的专栏添加一个额外的专栏表(product_stone),但我的解决方案有一些问题,首先,我尝试创建一组石头的产品:

问题描述 投票:0回答:1
直到这里一切都可以,但是每次我重新启动服务器时,该额外列中的所有数据都将设置为默认值(null):

Product_stone_table

我还试图将计数设置为product_stone表中的{nullable:true},并在创建产品期间添加计数,但是当我想重新启动服务器时,我会收到错误kile:

QueryFailedError: column "count" of relation "product_stone" contains null values 那里有人指导我吗?

product.entity.ts

@Entity()
export class Product extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @ManyToMany(() => Stone)
  @JoinTable({
    name: 'product_stone',
    joinColumn: {
      name: 'productId',
      referencedColumnName: 'id',
    },
    inverseJoinColumn: {
      name: 'stoneId',
      referencedColumnName: 'id',
    },
  })
  stones: Stone[];
}

stone.entity.ts

@Entity() export class Stone extends BaseEntity { @PrimaryGeneratedColumn() id: number; @Column() title: string; }

product_stone.entity.ts

@Entity('product_stone') export class ProductStone extends BaseEntity { @Column({ nullable: true }) count: number; @Column() @IsNotEmpty() @PrimaryColumn() productId: number; @Column() @IsNotEmpty() @PrimaryColumn() stoneId: number; }
    

我不认为您可以在多对多桌子上定义自定义属性。 documentation


node.js postgresql many-to-many nestjs typeorm
1个回答
3
投票

在您的情况下,这意味着您必须这样做:

// product_stone.entity.ts @Entity() export class ProductToStone { @PrimaryGeneratedColumn() public id: number; @Column() public productId: number; @Column() public stoneId: number; @Column() public count: number; @ManyToOne(() => Product, product => product.productToStone) public product: Product; @ManyToOne(() => Stone, stone => stone.productToStone) public stone: Stone; }

// product.entity.ts ... @OneToMany(() => ProductToStone, productToStone => productToStone.product) public productToStones!: ProductToStone[];

// stone.entity.ts ... @OneToMany(() => ProductToStone, productToStone => productToStone.stone) public productToStones!: ProductToStone[];

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.