Как удалить строки из таблицы соединений (ManyToMany) в Doctrine?

У меня есть таблица соединений, которая создается с помощью аннотации @ORM \ ManyToMany в Symfony2 / Doctrine. Он присоединяется к таблице Категория и Параметр .

Теперь я хочу удалить все параметры из таблицы параметров.Поскольку для таблицы соединений определены ограничения внешнего ключа, я не могу просто удалить строки из таблицы параметров. Сначала мне нужно удалить дочерние строки из таблицы соединений. Но синтаксис Dotrine DQL требует указания имени объекта, например:

DELETE Project\Entity\EntityName

Но каково имя объекта объединенной таблицы, сгенерированного с помощью ассоциации ManyToMany? Как с этим бороться?

В качестве альтернативы, как я могу установить ON UPDATE CASCADE и ON DELETE CASCADE для ограничений внешнего ключа в таблице соединений, определенных аннотацией @ORM \ ManyToMany .

РЕДАКТИРОВАТЬ:

схема объединенной таблицы:

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;

при ОБНОВЛЕНИИ и при УДАЛЕНИИ по умолчанию установлены на ОГРАНИЧИТЬ

КОНЕЧНОЕ РЕШЕНИЕ БУДЕТ:

 * @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")}) 
29
задан Dawid Ohia 4 January 2012 в 13:41
поделиться

1 ответ

Чтобы установить каскад на уровне доктрины:

@ORM\ManyToMany(targetEntity="Target", inversedBy="inverse", cascade={"remove", "persist"})

Дополнительная информация: Справочник по Doctrine2 .

Чтобы установить каскад на уровне MySQL:

@ORM\JoinColumn(onDelete="CASCADE", onUpdate="CASCADE")
30
ответ дан 28 November 2019 в 02:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: