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;