activityRepository->findBy(['accompanyingPeriod' => $period]); foreach ($activities as $activity) { $socialIssues = array_merge($socialIssues, $activity->getSocialIssues()->toArray()); } foreach ($period->getWorks() as $work) { $socialIssues[] = $work->getSocialAction()->getIssue(); } $socialIssuesByKey = []; foreach ($socialIssues as $si) { $socialIssuesByKey[spl_object_hash($si)] = $si; } $periodIssuesWithAncestors = []; foreach ($period->getSocialIssues() as $si) { /** @var SocialIssue $si */ $periodIssuesWithAncestors = array_merge( $periodIssuesWithAncestors, array_map( static fn (SocialIssue $si) => spl_object_hash($si), $si->getAncestors(true) ) ); } foreach ($socialIssuesByKey as $key => $si) { if (!\in_array($key, $periodIssuesWithAncestors, true)) { $this->context ->buildViolation( $constraint->messageSocialIssueCannotBeDeleted ) ->setParameter('%name%', $this->socialIssueRender->renderString($si, [])) ->addViolation(); } } } }