Symfony cascade={quot;remove";}VS孤立删除=true VS ondelete=";大量
我试图收集以下信息,以便在删除父实体时自动删除子实体。似乎最常见的方法是使用这三种注释中的一种:Symfony cascade={quot;remove";}VS孤立删除=true VS ondelete=";大量,symfony,doctrine,entity,cascade,Symfony,Doctrine,Entity,Cascade,我试图收集以下信息,以便在删除父实体时自动删除子实体。似乎最常见的方法是使用这三种注释中的一种:cascade={“remove”}或orphandremove=true或ondelete=“cascade” 我对第三个有点困惑:ondelete=“CASCADE”,因为官方文件中关于这一个的解释非常稀少),如果有人能证实我从网上的研究和经验中收集并理解的以下信息,我将非常高兴 它有什么作用 cascade={“remove”} ==>当拥有方实体被删除时,反向侧的实体被删除。即使您与另一方实体
cascade={“remove”}
或orphandremove=true
或ondelete=“cascade”
我对第三个有点困惑:ondelete=“CASCADE”
,因为官方文件中关于这一个的解释非常稀少),如果有人能证实我从网上的研究和经验中收集并理解的以下信息,我将非常高兴
它有什么作用
cascade={“remove”}
==>当拥有方实体被删除时,反向侧的实体被删除。即使您与另一方实体处于manytomy
- 应用于收集(因此在
或OneToMany
关系中)ManyToMany
- ORM中的实现
删除=真
==>当拥有方实体被删除且不再连接到任何其他拥有方实体时,反向侧的实体将被删除。(参考
- ORM中的实现
- 可与
、OneToOne
或OneToMany
ManyToMany
onDelete=“CASCADE”
==>这将向数据库中的外键列添加删除级联
- 这个策略有点棘手,但可能非常强大和快速。(参考…,但没有阅读更多解释)
- ORM必须做更少的工作(与前两种方法相比),因此应该有更好的性能
- 所有这三种方法都在双向关系实体上实现(对吗?)
- 使用
完全通过任何外键onDelete=cascade。(参考)cascade={“remove”}
和orphaneremove
在反向实体类中定义cascade={“remove”}
在所有者实体中定义ondelete=“CASCADE”
- 您也可以只编写
,让doctrine处理列名@ORM\JoinColumn(onDelete=“CASCADE”)
/**
* @OneToMany(targetEntity="Phonenumber", mappedBy="contact", cascade={"remove"})
*/
protected $Phonenumbers
删除=真
/**
* @OneToMany(targetEntity="Phonenumber", mappedBy="contact", orphanRemoval=true)
*/
protected $Phonenumbers
onDelete=“CASCADE”
onDelete=“CASCADE”
由数据库本身管理。CASCADE={“remove”}
由条令管理
onDelete=“CASCADE”
更快,因为操作是在数据库级别上执行的,而不是由条令执行。删除是由数据库服务器而不是条令执行的。使用CASCADE={“remove”}
条令必须管理实体本身,并将执行额外检查,以查看是否没有任何其他拥有实体。如果没有其他实体存在,则将删除该实体。但这会产生开销
cascade={“remove”}
/**
* @OneToMany(targetEntity="Phonenumber", mappedBy="contact", cascade={"remove"})
*/
protected $Phonenumbers
- 当拥有方实体为时,反向方的实体将被删除。即使您与其他拥有方实体处于多个实体中。否,如果该实体为其他实体所有,则不会被删除。
- 应在收集时使用(因此在一对一或多对多关系中)
- ORM中的实现
- 当拥有方实体被删除且不再与任何其他拥有方实体连接时,反向方的实体将被删除。不完全是这样,这会使条令表现为不属于其他实体,从而将其删除。
- ORM中的实现
- 可与OneToOne、OnetoMany或ManyToMany一起使用
- 这将向数据库中的外键列添加删除级联
- 这个策略有点棘手,但可能非常强大和快速。(这是一段引用自官方教程的话……但没有看到更多的解释)
- ORM必须做更少的工作(与前两种方法相比),因此应该有更好的性能