如何禁用多对多关系的级联删除?

zer*_*kms 6 php database doctrine symfony doctrine-orm

对于多对多关系(比如组和用户),只要删除了任一实体,就会自动删除联合表中的行,就像为关系设置了级联删除属性一样.所以基本上我想删除它,如果它是空的.所以解决方案必须保证不会丢弃任何关系(就像FK约束保证它一样).

默认情况下是否可以不执行此操作并在外键约束违反时抛出异常?

PS:删除之前的检查不是解决方案,因为它很容易出现竞争条件.

PPS:映射定义很简单,为了完整起见,我在这里发布它们(即使它们没有带来任何有用的东西)

PPPS:onDelete: cascade也不是解决方案:它ON DELETE CASCADE在数据库级别创建相应的.

PPPPS:ON DELETE RESTRICT 不能使用,因为doctrine将删除联合表中的所有引用.

在角色中:

manyToMany:
    users:
        targetEntity: UserAccount
        mappedBy: roles
Run Code Online (Sandbox Code Playgroud)

在用户中:

manyToMany:
    roles:
        targetEntity: Role
        joinTable:
            name: user_role
            joinColumns:
                user_id:
                    referencedColumnName: id
            inverseJoinColumns:
                role_id:
                    referencedColumnName: id
Run Code Online (Sandbox Code Playgroud)

Ser*_*nin 3

这个答案可以被视为一种解决方法。关联many-to-many可以替换为3个参与类之间的关联,因为Doctrine默认one-to-many/many-to-one没有级联删除。one-to-many

一对多/多对一