我有一个通过使用Symfony2 / Doctrine中的@ORM\ManyToMany注释创建的联接表。
它连接CategoryParameter表。

现在,我想从“参数”表中删除所有参数。因为在联接表上定义了外键约束,所以我不能只是从参数表中删除行。首先,我必须从联接表中删除子行。但是Dotrine的DQL语法要求提供实体名称,例如:

DELETE Project\Entity\EntityName

但是,使用ManyToMany关联生成的联接表实体的名称是什么?怎么处理呢?

或者,如何在@ORM\ManyToMany注释定义的联接表中的外键约束上设置ON UPDATE CASCADE和ON DELETE CASCADE。

编辑:

联接表模式:
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 UPDATEon 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")})

最佳答案

在学说水平上设置级联:

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

更多信息:Doctrine2 Annotation Reference

要在mysql级别设置级联:
@ORM\JoinColumn(onDelete="CASCADE", onUpdate="CASCADE")

10-07 17:14