/** * @param Search $search * @return SearchResult */ public function findBySearch(Search $search) { $builder = $this->createQueryBuilder('t')->innerJoin('t.paymentMethod', 'pm')->addSelect('pm')->leftJoin('t.details', 'd')->addSelect('d'); // Filter if (!is_null($date = $search->getFilter('date'))) { $builder->andWhere('t.date = :date')->setParameter(':date', $date); } if (!is_null($thirdName = $search->getFilter('thirdName'))) { $builder->andWhere('t.thirdName LIKE :thirdName')->setParameter(':thirdName', '%' . $thirdName . '%'); } // Orderby foreach ($search->getOrderby() as $key => $reverse) { switch ($key) { case 'amount': $builder->addOrderBy('t.amount', $reverse === true ? 'ASC' : 'DESC'); break; case 'date': $builder->addOrderBy('t.date', $reverse === true ? 'ASC' : 'DESC'); break; case 'paymentMethod': $builder->addOrderBy('pm.name', $reverse === true ? 'ASC' : 'DESC'); break; case 'thirdName': $builder->addOrderBy('t.thirdName', $reverse === true ? 'ASC' : 'DESC'); break; } } $builder->addOrderBy('t.id', 'DESC'); // Page $builder->setMaxResults(20); $builder->setFirstResult($search->getPage() * 20); return new SearchResult($builder, $search); }
/** * @param Search $search * @return SearchResult */ public function findBySearch(Search $search) { $builder = $this->createQueryBuilder('m')->leftJoin('m.promotions', 'p')->addSelect('p')->leftJoin('p.rank', 'r')->addSelect('r')->leftJoin('m.memberships', 'ms'); // Filter if (!is_null($city = $search->getFilter('city'))) { $builder->andWhere('m.city LIKE :city')->setParameter(':city', '%' . $city . '%'); } if (!is_null($firstname = $search->getFilter('firstname'))) { $builder->andWhere('m.firstname LIKE :firstname')->setParameter(':firstname', '%' . $firstname . '%'); } if (!is_null($lastname = $search->getFilter('lastname'))) { $builder->andWhere('m.lastname LIKE :lastname')->setParameter(':lastname', '%' . $lastname . '%'); } if (!is_null($season = $search->getFilter('season'))) { $builder->andWhere('ms.season = :season')->setParameter(':season', $season); } // Orderby foreach ($search->getOrderby() as $key => $reverse) { switch ($key) { case 'age': $builder->addOrderBy('m.birthday', $reverse === true ? 'ASC' : 'DESC'); break; case 'city': $builder->addOrderBy('m.city', $reverse === true ? 'DESC' : 'ASC'); break; case 'firstname': $builder->addOrderBy('m.firstname', $reverse === true ? 'DESC' : 'ASC'); break; case 'lastname': $builder->addOrderBy('m.lastname', $reverse === true ? 'DESC' : 'ASC'); break; } } $builder->addOrderBy('m.id', 'ASC'); // Page $builder->setMaxResults(20); $builder->setFirstResult($search->getPage() * 20); return new SearchResult($builder, $search); }
/** * @return int */ public function getPage() { return $this->search->getPage(); }