Estoy trabajando con Nest.js, TypeORM y PostgreSQL, tengo dos entidades (producto y piedra) con una relación de muchos a muchos, según mi propio proyecto comercial, tengo que agregar una columna adicional a esa tabla de muchos a muchos (product_stone), pero tengo un problema con mi solución, al principio trato de crear un producto con un conjunto de piedras:
"stones": [ {"id": 1,"count":1}, {"id": 2,"count": 3} ]
y después de eso, trato de agregar el conteo a la tabla product_stone actualizándola, el resultado será así: product_stone_table hasta aquí todo está bien, pero cada vez que reinicio el servidor, todos los datos en esa columna adicional serán establecido en su valor predeterminado (nulo): product_stone_table
Y también traté de no configurar el conteo en {nullable:true} en la tabla product_stone y agregar el conteo durante la creación de un producto, pero cuando quiero reiniciar el servidor recibo un error como este:
QueryFailedError: column "count" of relation "product_stone" contains null values
¿Hay alguien que me oriente?
producto.entidad.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[]; }
piedra.entity.ts
@Entity() export class Stone extends BaseEntity { @PrimaryGeneratedColumn() id: number; @Column() title: string; }
producto_piedra.entidad.ts
@Entity('product_stone') export class ProductStone extends BaseEntity { @Column({ nullable: true }) count: number; @Column() @IsNotEmpty() @PrimaryColumn() productId: number; @Column() @IsNotEmpty() @PrimaryColumn() stoneId: number; }
No creo que pueda definir atributos personalizados en una tabla de muchos a muchos de esa manera.
De la documentación :
En caso de que necesite tener propiedades adicionales en su relación de muchos a muchos, debe crear una nueva entidad usted mismo
En su caso, eso significaría que tendría que hacer algo así:
// 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 => postToCategory.product) public productToStone!: PostToCategory[];
// stone.entity.ts ... @OneToMany(() => ProductToStone, postToCategory => postToCategory.stone) public postToCategories!: PostToCategory[];