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