/** * @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); }