Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

238
Vistas
¿Cómo puedo actualizar alguna entidad con la relación ManyToMany?

ayudame por favor. Realmente no entiendo cómo funciona. Tengo una entidad llamada Producto, con una relación ManyToMany con otra entidad llamada Car con cascade true flag habilitado.

 @Entity() export class Product { @PrimaryGeneratedColumn() id: number @ManyToMany(() => Car, { cascade: true }) @JoinTable() cars: Car[] }

La entidad Car no contiene una referencia a la entidad Product. Eso significa que creo que la relación es unidireccional. Entonces, cuando guardo un producto, configuro los autos para este producto:

 const cars = await this.carService.getByIds(createProductDto.cars) const newProduct = this.productsRepository.create({ ...createProductDto, cars }) await this.productsRepository.save(newProduct)

Obtengo las entidades de automóviles por ID y las guardo en el producto. Esto funciona bien. No estoy seguro de que sea la mejor manera, pero no conozco otra.

Los problemas surgen cuando trato de actualizar algún producto existente en la base de datos. Recibo los siguientes errores:

 ERROR [ExceptionsHandler] duplicate key value violates unique constraint "PK_f7b49d8fd8d09ea2fc2e7542f3f"

o

 Error: Cannot query across many-to-many for property cars

u otro... Ayúdenme por favor. Quiero entender cuál es la mejor manera de trabajar con tales relaciones. ¿Cuál es la mejor manera de crearlo, actualizarlo y eliminarlo? Gracias

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Usted afirma tener un M:M entre Autos y Productos, pero eso no es lo que describe. Describe un 1:M para automóviles y productos. Hacer referencia a los automóviles en la tabla de productos significa que un automóvil determinado puede tener muchos productos, pero un producto determinado solo puede ser utilizado por 1 automóvil. Ese es el resultado de hacer referencia a Cars from Products (no clasificaría como unidireccional dado que cualquiera de los dos puedo obtener el otro, solo cambia el número que puedo obtener). Sin embargo, creo que lo que quiere es un M:M. La implementación típica de un M:M requiere una tercera tabla. Con esta configuración, ni la tabla Cars ni Products hacen referencia a la otra, sino que la tercera tabla hace referencia a ambas. Desafortunadamente, no conozco ni reconozco su administrador de ofuscación (ORM que está utilizando). Así que esbozaré una posible definición de ddl para las tablas.

 create table cars ( car_id integer generated always as identity primary key , vin text , manufacturer text -- other Car attributes ); create table products( prod_id integer generated always as identity primary key , manufacturer text -- other product ); -- create the reference/intersection table for M:M Cars:Products create table car_products( car_id , prod_id -- attributes that pertain only to the combination of -- of the other tables , model_code text , serial_number text -- constraints , constraint car_products_pk primary key (car_id, prod_id) , constraint car_products_2_cars_fk foreign key (car_id) references cars(car_id) on delete cascade , constatint car_products_2_products_fk foreign key(prod_id) references products(prod_id) on delete cascade );

Ahora, con esta configuración, un automóvil determinado puede tener cualquier número de productos y un producto determinado puede ser utilizado por cualquier número de automóviles. (Nota: en esta configuración, un producto es diferente de una parte). Espero que esto lo ayude a comprender las relaciones 1:M frente a las relaciones M:M.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda