Daw*_*hia 29 mysql symfony doctrine-orm
我有一个通过@ORM\ManyToMany
在Symfony2/Doctrine中使用注释创建的连接表.它加入Category
和Parameter
表.
现在我想删除Parameter表中的所有参数.因为在join-table上定义了外键约束,所以我不能只从Parameter表中删除行.首先,我必须从join-table中删除子行.但是Dotrine的DQL语法需要给出实体的名称,例如:
DELETE Project\Entity\EntityName
Run Code Online (Sandbox Code Playgroud)
但是使用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;
Run Code Online (Sandbox Code Playgroud)
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")})
Run Code Online (Sandbox Code Playgroud)
Ino*_*ryy 30
要在学说级别设置级联:
@ORM\ManyToMany(targetEntity="Target", inversedBy="inverse", cascade={"remove", "persist"})
Run Code Online (Sandbox Code Playgroud)
更多信息:Doctrine2注释参考.
要在mysql级别设置级联:
@ORM\JoinColumn(onDelete="CASCADE", onUpdate="CASCADE")
Run Code Online (Sandbox Code Playgroud)