Tengo una tabla de unión que se crea utilizando la anotación @ORM\ManyToMany
en Symfony2/Doctrine. Se une a Category
y Parameter
tabla.Cómo eliminar filas de join-table (ManyToMany) en Doctrine?
Ahora quiero eliminar todos los parámetros de la tabla de parámetros. Debido a que hay restricciones de clave externa definidas en la tabla de unión, no puedo simplemente eliminar filas de la tabla de parámetros. Primero tengo que eliminar filas secundarias de join-table. Sin embargo, la sintaxis de DQL Dotrine requiere para dar un nombre de la entidad, como:
DELETE Project\Entity\EntityName
Pero ¿cuál es el nombre de la entidad unirse a-tabla generada mediante el uso de la asociación ManyToMany? ¿Como lidiar con?
Alternativamente, ¿cómo puedo configurar ACTUALIZAR CASCADA y ACTIVAR ELIMINAR CASCADA en restricciones de clave externa en la tabla de unión definida por la anotación @ORM\ManyToMany
?
EDIT:
esquema de unirse a la mesa:
CREATE TABLE `categories_params` (
`category_id` INT(11) NOT NULL,
`param_id` INT(11) NOT NULL,
PRIMARY KEY (`category_id`, `param_id`),
INDEX `IDX_87A730CB12469DE2` (`category_id`),
INDEX `IDX_87A730CB5647C863` (`param_id`),
CONSTRAINT `categories_params_ibfk_1` FOREIGN KEY (`category_id`) REFERENCES `allegro_category` (`id`),
CONSTRAINT `categories_params_ibfk_2` FOREIGN KEY (`param_id`) REFERENCES `category_param` (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
on UPDATE
y on DELETE
por defecto se establecen en RESTRICT
la solución final sería:
* @ORM\ManyToMany(targetEntity="CategoryParam", cascade={"persist","remove"})
* @ORM\JoinTable(name="categories_params",
* joinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id", onDelete="CASCADE")},
* inverseJoinColumns={@ORM\JoinColumn(name="param_id", referencedColumnName="id", onDelete="CASCADE")})
Se puede publicar el esquema de la tabla? Sospecho que tiene una restricción FK en la tabla de unión para eliminar filas si se elimina alguna fila de la tabla de Categoría o Parámetros. Si este es el caso, todo lo que tiene que hacer es eliminar de la tabla de parámetros, y MySQL se encargará del resto por usted. –
En realidad, la restricción FK en mi tabla de unión evita que se eliminen las filas de la tabla padre (Parámetro) si se hace referencia a ellas por la tabla de unión. Puedo cambiar esta restricción en el esquema db, pero quería hacer eso usando la anotación de Doctrine (para poder generar un esquema completo desde el código sin ajustar manualmente la base de datos). – JohnM2
¿Le importaría publicar el esquema? Estoy interesado en ver si el manejo de FK se hace en la capa de aplicación a través de Doctrine, o si Doctrine simplemente está abstrayendo lo que MySQL hace. –