Depuis Doctrine ^2.5 (peut-être également les versions précédentes) :
si on appelle PersistentCollection::clear() ou PersistentCollection::removeElement(),
et que la liaison a orphanRemoval : les éléments à supprimer seront enregistrés dans l’UnitOfWork comme étant à supprimer en base de données.
Jusque-là, tout va bien : c’est le comportement attendu.
Mais si on veut re-ajouter un élément indiqué comme à supprimer (pour annuler sa suppression par exemple) alors PersistentCollection n’annule pas la demande de suppression.
Résultat : l’élément supprimé puis re-ajouté est finalement supprimé en base alors qu’on voulait le conserver.