I want to check my understanding of cascade operations on Doctrine associations. For the purpose of this question, I have two models: Customer
and Insuree
.
If I define a many to many relationship between a Customer
and Insuree
and set cascade{"all"}
, I understand that this will:
- Adding a new insuree to a customer will persist this insuree and create an association in the join table.
- Removing an insuree from the collection will detach the insuree from the customer and detach the customer from the insuree.
- Deleting the customer will delete all insurees associated with the customer.
This is the definition of the association on Customers
.
/**
* @ORMManyToMany(targetEntity="Insuree", inversedBy="customers", cascade={"all"})
* @ORMJoinTable(name="customer_insuree",
* joinColumns={@ORMJoinColumn(name="customer_id", referencedColumnName="id")},
* inverseJoinColumns={@ORMJoinColumn(name="insuree_id", referencedColumnName="id")}
* )
*/
protected $insurees;
If I define the inverse many to many relationship between an Insuree
and Customer
and set cascade{"all"}
, I understand that this will:
- Adding a new customer to an insuree will persist this customer and create an association in the join table.
- Removing a customer from the collection will detach the customer from the insuree and detach the insuree from the customer.
- Deleting the insuree will delete all customers associated with it.
This is the definition of the association on Insurees
.
/**
* @ORMManyToMany(targetEntity="Customer", mappedBy="insurees", cascade={"all"})
*/
protected $customers;
If I then define the relationship as to cascade on persist, merge and detach - deleting the insuree will not delete all associated customers - it will only remove the associations between the insuree and its customers?
/**
* @ORMManyToMany(targetEntity="Customer", mappedBy="insurees", cascade={"persist", "merge", "detach"})
*/
protected $customers;
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…