Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

240
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!