Fix newsletter adding/removing with orphan removal
[MAILPOET-2900]
This commit is contained in:
@@ -181,7 +181,7 @@ class NewsletterSaveController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function updateSegments(NewsletterEntity $newsletter, array $segments) {
|
private function updateSegments(NewsletterEntity $newsletter, array $segments) {
|
||||||
$newsletter->getNewsletterSegments()->clear();
|
$newsletterSegments = [];
|
||||||
foreach ($segments as $segmentData) {
|
foreach ($segments as $segmentData) {
|
||||||
if (!is_array($segmentData) || !isset($segmentData['id'])) {
|
if (!is_array($segmentData) || !isset($segmentData['id'])) {
|
||||||
continue;
|
continue;
|
||||||
@@ -197,8 +197,21 @@ class NewsletterSaveController {
|
|||||||
$newsletterSegment = new NewsletterSegmentEntity($newsletter, $segment);
|
$newsletterSegment = new NewsletterSegmentEntity($newsletter, $segment);
|
||||||
$this->entityManager->persist($newsletterSegment);
|
$this->entityManager->persist($newsletterSegment);
|
||||||
}
|
}
|
||||||
$newsletter->getNewsletterSegments()->add($newsletterSegment);
|
|
||||||
|
if (!$newsletter->getNewsletterSegments()->contains($newsletterSegment)) {
|
||||||
|
$newsletter->getNewsletterSegments()->add($newsletterSegment);
|
||||||
|
}
|
||||||
|
$newsletterSegments[] = $newsletterSegment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// on Doctrine < 2.6, when using orphan removal, we need to remove items manually instead of replacing the
|
||||||
|
// whole collection (see https://github.com/doctrine/orm/commit/1587aac4ff6b0753ddd5f8b8d4558b6b40096057)
|
||||||
|
foreach ($newsletter->getNewsletterSegments() as $newsletterSegment) {
|
||||||
|
if (!in_array($newsletterSegment, $newsletterSegments, true)) {
|
||||||
|
$newsletter->getNewsletterSegments()->removeElement($newsletterSegment); // triggers orphan removal
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$this->entityManager->flush();
|
$this->entityManager->flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user