Extended details on how to remove entities and their associations
This commit is contained in:
parent
50e35e6bdc
commit
1017e2c6c7
@ -117,6 +117,30 @@ The semantics of the remove operation, applied to an entity X are as follows:
|
||||
* If X is a removed entity, it is ignored by the remove operation.
|
||||
* A removed entity X will be removed from the database as a result of the flush operation.
|
||||
|
||||
Removing an entity will also automatically delete any exisiting records in many-to-many
|
||||
join tables that link this entity. The action taken depends on the value of the `@joinColumn`
|
||||
mapping attribute "onDelete". Either Doctrine issues a dedicated `DELETE` statement
|
||||
for records of each join table or it depends on the foreign key semantics of
|
||||
onDelete="CASCADE".
|
||||
|
||||
Deleting an object with all its associated objects can be achieved in multiple
|
||||
ways with very different performance impacts.
|
||||
|
||||
1. If an association is marked as `CASCADE=REMOVE` Doctrine 2 will fetch this
|
||||
association. If its a Single association it will pass this entity to
|
||||
´EntityManager#remove()`. If the association is a collection, Doctrine will loop over all
|
||||
its elements and pass them to `EntityManager#remove()`. In both cases the
|
||||
cascade remove semantics are applied recursively. For large object graphs
|
||||
this removal strategy can be very costly.
|
||||
2. Using a DQL `DELETE` statement allows you to delete multiple entities of a
|
||||
type with a single command and without hydrating these entities. This
|
||||
can be very efficient to delete large object graphs from the database.
|
||||
3. Using foreign key semantics `onDelete="CASCADE"` can force the database
|
||||
to remove all associated objects internally. This strategy is a bit
|
||||
tricky to get right but can be very powerful and fast. You should be aware
|
||||
however that using strategy 1 (`CASCADE=REMOVE`) completly by-passes
|
||||
any foreign key `onDelete=CASCADE` option, because Doctrine will fetch and remove
|
||||
all associated entities explicitly nevertheless.
|
||||
|
||||
++ Detaching entities
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user