Doctrine 2 cascade detach

máj 15

Ha kapcsolt entitásokat akarunk detach-elni az EntityManagerről memóriafelszabadítás végett, akkor az nem fog menni automatikusan. Tegyük fel, van egy ilyen kapcsolatunk: 

Post --1m--> TagLink --m1--> Tag

Ha most nyomunk egy $em->detach($post) -ot, akkor csak a Post entitást távolítja el a Doctrine, a többi bent marad az EntityManagerben.

Megoldás #1: kézzel eltávolítjuk a kapcsolt elemeket
Megoldás #2: a Post, es TagLink megfelelő tagváltozóinak OneToMany és ManyToOne annotationjébe beírjuk ezt: 

cascade={"detach"}

Példa a Post -> TagLink kapcsolatra:

/**
 * @OneToMany(targetEntity="TagLink", mappedBy="post", cascade={"detach"})
 * @JoinColumn(name="id", referencedColumnName="post_id")
 */
protected $tagLinks;

php doctrine