У меня есть таблица соединений, которая создается с помощью аннотации @ORM\ManyToMany
в Symfony2/Doctrine.
Он соединяется с таблицей Category
и Parameter
.
Теперь я хочу удалить все параметры из таблицы параметров. Поскольку существуют ограничения внешнего ключа, определенные в таблице соединений, я не могу просто удалять строки из таблицы параметров. Сначала мне нужно удалить дочерние строки из таблицы join. Но для синтаксиса Dotrine DQL требуется указать имя объекта, например:
DELETE Project\Entity\EntityName
Но каково имя объекта join-table, сгенерированного с использованием ассоциации ManyToMany? Как с этим бороться?
В качестве альтернативы, как я могу установить ON UPDATE CASCADE и ON DELETE CASCADE по ограничениям внешнего ключа в таблице соединений, определенной аннотацией @ORM\ManyToMany
.
EDIT:
схема подключения-таблицы:
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
и on DELETE
по умолчанию установлены на RESTRICT
ЗАКЛЮЧИТЕЛЬНОЕ РЕШЕНИЕ БЫЛО:
* @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")})