public function search(PushSearch $search) { if (!$search->searchIsValid()) { throw new \InvalidArgumentException("Unable to run an empty search request in " . __CLASS__); } $em = $this->getEntityManager(); $qb = $em->createQueryBuilder(); $qb->select('p')->from('Mrk\\GitPushWatcherBundle\\Entity\\Push', 'p'); if ($search->hasType()) { $qb->andWhere('p.' . $search->getType() . ' = :value '); $qb->setParameter('value', $search->getValue()); } if ($search->hasAuthor()) { $qb->andWhere('p.text LIKE :author '); $qb->setParameter('author', $search->getLikeAuthor()); } if ($search->hasPattern()) { $qb->andWhere('p.text LIKE :pattern '); $qb->setParameter('pattern', $search->getLikePattern()); } $qb->orderBy('p.' . $search->getOrderField(), $search->getOrderValue()); return $qb->getQuery()->getResult(); }