From 3ce40e7f230c16c8c99bcd21058988152a50ac39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20H=C3=BCbner?= Date: Mon, 24 Apr 2017 11:34:47 +0200 Subject: [PATCH] Add search queries --- .../Repository/LDraw/ModelRepository.php | 38 ++++++++++++++++++- .../Repository/Rebrickable/SetRepository.php | 14 +++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/src/AppBundle/Repository/LDraw/ModelRepository.php b/src/AppBundle/Repository/LDraw/ModelRepository.php index 27f6c2a..79a08a3 100644 --- a/src/AppBundle/Repository/LDraw/ModelRepository.php +++ b/src/AppBundle/Repository/LDraw/ModelRepository.php @@ -20,7 +20,7 @@ class ModelRepository extends BaseRepository $queryBuilder = $this->createQueryBuilder('model') // ->where('model.name NOT LIKE :obsolete') // ->setParameter('obsolete','~%') -; + ; return $queryBuilder; } @@ -57,6 +57,23 @@ class ModelRepository extends BaseRepository return $this->findOneBy(['name' => $name]); } + public function findAllRegularBySetNumber($number) + { + $inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($number); + + $queryBuilder = $this->createQueryBuilder('model'); + + $queryBuilder + ->join(Part::class, 'part', JOIN::WITH, 'part.model = model') + ->join(Inventory_Part::class, 'inventory_part', JOIN::WITH, 'part.number = inventory_part.part') + ->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory_part.inventory = :inventory') + ->setParameter('inventory', $inventory) + ->addSelect('inventory_part') + ->distinct(true); + + return ($queryBuilder->getQuery()->getScalarResult()); + } + public function findAllBySetNumber($number) { $queryBuilder = $this->createQueryBuilder('model'); @@ -90,6 +107,25 @@ class ModelRepository extends BaseRepository return $queryBuilder->getQuery()->getResult(); } + public function findByQuery($query, $limit = null) { + $queryBuilder = $this->createQueryBuilder('model'); + + + $queryBuilder->where( + $queryBuilder->expr()->orX( + $queryBuilder->expr()->like('model.number', ':number'), + $queryBuilder->expr()->like('model.name', ':name') + )) + ->setParameter('name', '%'.$query.'%') + ->setParameter('number', $query.'%'); + + if($limit) { + $queryBuilder->setMaxResults($limit); + } + + return $queryBuilder->getQuery()->getResult(); + } + /** * Create new Model entity with $number or retrieve one. * diff --git a/src/AppBundle/Repository/Rebrickable/SetRepository.php b/src/AppBundle/Repository/Rebrickable/SetRepository.php index ce6b591..3d3597b 100644 --- a/src/AppBundle/Repository/Rebrickable/SetRepository.php +++ b/src/AppBundle/Repository/Rebrickable/SetRepository.php @@ -50,4 +50,18 @@ class SetRepository extends BaseRepository return $queryBuilder->getQuery()->getResult(); } + + public function findByQuery($query, $limit = null) { + $queryBuilder = $this->createQueryBuilder('s') + ->where('s.name LIKE :name') + ->orWhere('s.number LIKE :number') + ->setParameter('name', '%'.$query.'%') + ->setParameter('number', $query.'%'); + + if($limit) { + $queryBuilder->setMaxResults($limit); + } + + return $queryBuilder->getQuery()->getResult(); + } }