我想确认一下Doctrine关联级联操作的理解。在这个问题中,我有两个模型: Customer
和 Insuree
。
如果我在一个Customer
和Insuree
之间定义了多对多的关系,并设置了cascade{"all"}
,我理解这将会:
- 向顾客添加新的被保险人将会保存此被保险人并在连接表中创建一个关联。
- 从集合中删除一个被保险人将会取消该被保险人与顾客之间的关联,并取消顾客与被保险人之间的关联。
- 删除顾客将会删除所有与顾客相关的被保险人。
这是在Customers
上定义的关联的定义。
/**
* @ORM\ManyToMany(targetEntity="Insuree", inversedBy="customers", cascade={"all"})
* @ORM\JoinTable(name="customer_insuree",
* joinColumns={@ORM\JoinColumn(name="customer_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="insuree_id", referencedColumnName="id")}
* )
*/
protected $insurees;
如果我在一个Insuree和Customer之间定义了多对多的反向关系,并设置cascade{"all"},我理解这将会:
- 将新客户添加到保险人中将会持久化此客户并在联接表中创建一个关联。
- 从集合中删除客户将分离该客户与保险人之间的关系,并将保险人与该客户之间的关系也分离。
- 删除保险人将删除与其相关联的所有客户。
/**
* @ORM\ManyToMany(targetEntity="Customer", mappedBy="insurees", cascade={"all"})
*/
protected $customers;
如果我将关系定义为在持久化、合并和分离时进行级联 - 删除被保险人将不会删除所有相关的客户 - 它只会删除被保险人与其客户之间的关联关系?
/**
* @ORM\ManyToMany(targetEntity="Customer", mappedBy="insurees", cascade={"persist", "merge", "detach"})
*/
protected $customers;