/**
  * @param integer   $userId
  * @param Paginator $paginator
  * @param integer   $page
  * @param integer   $limit
  * @param string    $q
  * @param           $filter
  *
  * @return array
  */
 public function getPaginatedAndFilteredFriends($userId, $paginator, $page, $limit, $q, $filter)
 {
     $qb = $this->getEntityManager()->createQueryBuilder();
     $query = $qb->select('r')->from('NetworkStoreBundle:Relationship', 'r')->join('r.user', 'u')->join('r.partner', 'p')->where('u.id = :user')->andWhere('CONCAT(p.firstName, CONCAT(\' \', p.lastName)) LIKE :q')->andWhere('r.status = :status')->setParameters(['user' => $userId, 'status' => RelationshipStatusEnumType::FS_ACCEPTED])->setParameter('q', '%' . $q . '%');
     if ($filter != null) {
         $query = $filter($query);
     }
     $query = $query->getQuery();
     $format = function ($friend) {
         $p = $friend->getPartner();
         return ['id' => $p->getId(), 'text' => $p->getFirstName() . ' ' . $p->getLastName()];
     };
     return $paginator->getPaginatedResult($query, $page, $limit, $format);
 }
 /**
  * @param string $childClass
  * @param int    $parentId
  * @param string $like
  * @param int    $page
  * @param int    $limit
  *
  * @return array
  */
 public function getChildrenNamedLike($childClass, $parentId, $like, $page, $limit)
 {
     $parentClass = strtolower($childClass::getParent());
     $q = $this->em->createQueryBuilder()->select('u')->from($childClass, 'u')->join("u.{$parentClass}", 'p')->where("p.id = :parentId")->andWhere("u.name LIKE :q")->orderBy('u.id')->setParameter('parentId', $parentId)->setParameter('q', '%' . $like . '%');
     return $this->paginator->getPaginatedResult($q, $page, $limit);
 }