【发布时间】:2014-08-28 01:23:14
【问题描述】:
我想检查我对 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"},我知道这将:
- 向被保险人添加新客户将保留该客户并在连接表中创建关联。
- 从集合中删除客户将使客户与被保险人分离,并将被保险人与客户分离。
- 删除被保险人将删除与其关联的所有客户。
这是Insurees上的关联定义。
/**
* @ORM\ManyToMany(targetEntity="Customer", mappedBy="insurees", cascade={"all"})
*/
protected $customers;
如果我随后将关系定义为在持久化、合并和分离上级联 - 删除被保险人不会删除所有关联的客户 - 它只会删除被保险人与其客户之间的关联?
/**
* @ORM\ManyToMany(targetEntity="Customer", mappedBy="insurees", cascade={"persist", "merge", "detach"})
*/
protected $customers;
【问题讨论】:
-
您不能通过创建一些
Customers 和Insurees 并开始删除/添加记录来检查您对级联关系的理解是否正确吗?