/** * Find recommended concerts * * @param Event $event Event * @param User $user User * * @return [] */ public function findRecommendedConcerts(Event $event, User $user) { $eventRepository = $this->entityManager->getRepository('AppBundle:Event'); $genreRepository = $this->entityManager->getRepository('AppBundle:Genre'); $groupRepository = $this->entityManager->getRepository('AppBundle:Group'); $eventGenres = []; $eventGroups = []; /** @var EventGroup $eventGroup */ foreach ($event->getEventGroups()->getValues() as $eventGroup) { $groupGenres = $eventGroup->getGroup()->getGroupGenres(); // Get groups from event $eventGroups[] = $eventGroup->getGroup(); /** @var GroupGenre $groupGenre */ foreach ($groupGenres as $groupGenre) { // Get genres from event $eventGenres[] = $groupGenre->getGenre(); } } // Get user bookmarked genres and groups $userBookmarkedGenres = $genreRepository->findGenresByUser($user); $userBookmarkedGroups = $groupRepository->findGroupsByUser($user); // Combine event genres and groups with user bookmarked genres and groups $recommendedGenres = array_merge($userBookmarkedGenres, $eventGenres); $recommendedGroups = array_merge($userBookmarkedGroups, $eventGroups); $events = $eventRepository->findAllActiveByGenresAndGroupsWithLimit($recommendedGenres, $recommendedGroups, Event::NUMBER); foreach ($events as $key => $element) { if ($event === $element) { unset($events[$key]); } } return $events; }