Ale*_*s_D 89 entity doctrine cascade symfony
我尝试收集有关以下方式的一些信息,以便在删除父实体时自动删除子实体.似乎最常见的方法是使用这三个注释:cascade = {"remove"} OR orphanRemoval = true OR ondelete ="CASCADE".
我对第三个问题感到有点困惑:ondelete ="CASCADE",正如关于这个的官方文档中的解释非常稀缺)如果有人能够证实我从我的研究中收集和了解的以下信息,我会很高兴.网和经验......
cascade = {"remove"}
==>当拥有方实体为时,删除反面的实体.即使你与其他拥有的实体有许多不同之处.
- 应该用于集合(所以在OneToMany或ManyToMany关系中)
- 在ORM中实现
orphanRemoval = true
==>当拥有方实体为AND时,将删除反方的实体,并且它不再连接到任何其他拥有方实体.(参考 doctrine official_doc
- ORM中的实现
- 可以与OneToOne,OnetoMany或ManyToMany一起使用
onDelete ="CASCADE"
==>这会将删除级联添加到数据库中的外键列
- 这个策略有点难以实现,但可以非常强大和快速.(参见 doctrine official_doc ......但还没有阅读更多解释)
- ORM必须做的工作少(与之前的两种做法相比),因此应该有更好的表现.
其他信息
- 所有这三种方式都在双向关系实体实现(右???)
- 使用cascade = {"remove"}完全绕过任何外键onDelete = CASCADE.(参见doctrine_official_doc)
级联= { "去除"}
/**
* @OneToMany(targetEntity="Phonenumber", mappedBy="contact", cascade={"remove"})
*/
protected $Phonenumbers
Run Code Online (Sandbox Code Playgroud)
orphanRemoval =真
/**
* @OneToMany(targetEntity="Phonenumber", mappedBy="contact", orphanRemoval=true)
*/
protected $Phonenumbers
Run Code Online (Sandbox Code Playgroud)
onDelete = "CASCADE"
/**
* @ManyToOne(targetEntity="Contact", inversedBy="phonenumbers")
* @JoinColumn(name="contact_id", referencedColumnName="contact_id", onDelete="CASCADE")
*/
protected $contact;
Run Code Online (Sandbox Code Playgroud)
Waa*_*als 56
onDelete="CASCADE"由数据库本身管理.cascade={"remove"}由学说管理.
onDelete="CASCADE"更快,因为操作是在数据库级别而不是在学说上执行的.删除由数据库服务器执行,而不是Doctrine.随着cascade={"remove"}学说来管理实体本身将执行额外的检查,看它是否没有任何其他实体拥有.当没有其他存在时,它将删除该实体.但这会产生开销.
级联= { "去除"}
orphanRemoval = "真"
onDelete = "CASCADE"
| 归档时间: |
|
| 查看次数: |
33354 次 |
| 最近记录: |