diff --git a/src/AppBundle/Entity/Rebrickable/Inventory_Part.php b/src/AppBundle/Entity/Rebrickable/Inventory_Part.php index 1aea153..bad24d1 100644 --- a/src/AppBundle/Entity/Rebrickable/Inventory_Part.php +++ b/src/AppBundle/Entity/Rebrickable/Inventory_Part.php @@ -23,7 +23,7 @@ class Inventory_Part /** * @var Color * @ORM\Id - * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Color", inversedBy="inventoryParts") + * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Color", inversedBy="inventoryParts", fetch="EAGER") */ protected $color; @@ -37,7 +37,7 @@ class Inventory_Part /** * @var Part * @ORM\Id - * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Rebrickable\Part", inversedBy="inventoryParts") + * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Rebrickable\Part", inversedBy="inventoryParts", fetch="EAGER") */ protected $part; diff --git a/src/AppBundle/Entity/Rebrickable/Part.php b/src/AppBundle/Entity/Rebrickable/Part.php index 686a77a..d00b7d4 100644 --- a/src/AppBundle/Entity/Rebrickable/Part.php +++ b/src/AppBundle/Entity/Rebrickable/Part.php @@ -37,7 +37,7 @@ class Part /** * @var Model * - * @ORM\ManyToOne(targetEntity="AppBundle\Entity\LDraw\Model", inversedBy="parts") + * @ORM\ManyToOne(targetEntity="AppBundle\Entity\LDraw\Model", inversedBy="parts", fetch="EAGER") */ private $model; diff --git a/src/AppBundle/Repository/ColorRepository.php b/src/AppBundle/Repository/ColorRepository.php index 4200578..2273a0d 100644 --- a/src/AppBundle/Repository/ColorRepository.php +++ b/src/AppBundle/Repository/ColorRepository.php @@ -2,6 +2,25 @@ namespace AppBundle\Repository; +use AppBundle\Entity\Rebrickable\Inventory; +use AppBundle\Entity\Rebrickable\Inventory_Part; +use AppBundle\Entity\Rebrickable\Set; +use Doctrine\ORM\Query\Expr\Join; + class ColorRepository extends BaseRepository { + public function findAllBySet(Set $set) + { + $inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($set->getNumber()); + + $queryBuilder = $this->createQueryBuilder('color'); + + $queryBuilder + ->join(Inventory_Part::class, 'inventory_part', Join::WITH, 'inventory_part.color = color.id') + ->where('inventory_part.inventory = :inventory') + ->setParameter('inventory', $inventory) + ->distinct(true); + + return $queryBuilder->getQuery()->getResult(); + } } diff --git a/src/AppBundle/Repository/LDraw/ModelRepository.php b/src/AppBundle/Repository/LDraw/ModelRepository.php index 79a08a3..e1c3502 100644 --- a/src/AppBundle/Repository/LDraw/ModelRepository.php +++ b/src/AppBundle/Repository/LDraw/ModelRepository.php @@ -18,9 +18,8 @@ class ModelRepository extends BaseRepository public function getFilteredQueryBuilder() { $queryBuilder = $this->createQueryBuilder('model') -// ->where('model.name NOT LIKE :obsolete') -// ->setParameter('obsolete','~%') - ; + ->where('model.name NOT LIKE :obsolete') + ->setParameter('obsolete','~%'); return $queryBuilder; } @@ -62,7 +61,7 @@ class ModelRepository extends BaseRepository $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') diff --git a/src/AppBundle/Repository/Rebrickable/InventoryRepository.php b/src/AppBundle/Repository/Rebrickable/InventoryRepository.php index e542f17..8acffb7 100644 --- a/src/AppBundle/Repository/Rebrickable/InventoryRepository.php +++ b/src/AppBundle/Repository/Rebrickable/InventoryRepository.php @@ -4,6 +4,7 @@ namespace AppBundle\Repository\Rebrickable; use AppBundle\Entity\Rebrickable\Set; use AppBundle\Repository\BaseRepository; +use Doctrine\ORM\Query; class InventoryRepository extends BaseRepository { @@ -13,8 +14,9 @@ class InventoryRepository extends BaseRepository ->where('inventory.set = :setNumber') ->setParameter('setNumber', $number) ->orderBy('inventory.version', 'DESC') - ->setMaxResults(1); + ->setMaxResults(1) + ->select('inventory.id'); - return $queryBuilder->getQuery()->getOneOrNullResult(); + return $queryBuilder->getQuery()->getSingleScalarResult(); } } diff --git a/src/AppBundle/Repository/Rebrickable/Inventory_PartRepository.php b/src/AppBundle/Repository/Rebrickable/Inventory_PartRepository.php index 95b07f0..66d590d 100644 --- a/src/AppBundle/Repository/Rebrickable/Inventory_PartRepository.php +++ b/src/AppBundle/Repository/Rebrickable/Inventory_PartRepository.php @@ -3,6 +3,7 @@ namespace AppBundle\Repository\Rebrickable; use AppBundle\Entity\LDraw\Category; +use AppBundle\Entity\LDraw\Model; use AppBundle\Entity\Rebrickable\Inventory; use AppBundle\Entity\Rebrickable\Inventory_Part; use AppBundle\Entity\Rebrickable\Part; @@ -11,32 +12,38 @@ use Doctrine\ORM\Query\Expr\Join; class Inventory_PartRepository extends BaseRepository { - public function findAllRegularBySetNumber($number) + /** + * Finds all inventoty_parts in newest inventory of set. + * + * @param string $number Unique number identifier of set + * @param bool $spare If true - find all spare parts, false - find all regular parts, null - spare and regular parts + * @param bool $model If true - find all parts with model relation, false - find all parts without model relation, null - all parts + * @return array + */ + public function findAllBySetNumber($number, $spare = null, $model = null) { $inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($number); $queryBuilder = $this->createQueryBuilder('inventory_part') - ->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory_part.inventory = :inventory') - ->join(Part::class, 'part', JOIN::WITH, 'inventory_part.part = part.number') - ->where('part.category != 17') - ->setParameter('inventory', $inventory) - ->andWhere('inventory_part.spare = FALSE') - ->distinct(true); + ->where('inventory_part.inventory = :inventory') + ->setParameter('inventory', $inventory); - return $queryBuilder->getQuery()->getResult(); - } - public function findAllSpareBySetNumber($number) - { - $inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($number); + if($spare !== null) { + $queryBuilder + ->andWhere('inventory_part.spare = :spare') + ->setParameter('spare', $spare); + } - $queryBuilder = $this->createQueryBuilder('inventory_part') - ->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory_part.inventory = :inventory') - ->join(Part::class, 'part', JOIN::WITH, 'inventory_part.part = part.number') - ->where('part.category != 17') - ->setParameter('inventory', $inventory) - ->andWhere('inventory_part.spare = TRUE') - ->distinct(true); + if($model !== null) { + $queryBuilder + ->join(Part::class, 'part', JOIN::WITH, 'inventory_part.part = part'); + if($model === true) { + $queryBuilder->andWhere('part.model IS NOT NULL'); + } else { + $queryBuilder->andWhere('part.model IS NULL'); + } + } return $queryBuilder->getQuery()->getResult(); } @@ -46,14 +53,10 @@ class Inventory_PartRepository extends BaseRepository $inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($number); $queryBuilder = $this->createQueryBuilder('inventory_part') - ->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory_part.inventory = inventory') - ->join(Part::class, 'part', JOIN::WITH, 'inventory_part.part = part.number') - ->where('part.category != 17') - ->andWhere('inventory.id = :inventoryId') - ->setParameter('inventoryId', $inventory->getId()) + ->where('inventory_part.inventory = :inventory') + ->setParameter('inventory', $inventory) ->andWhere('inventory_part.color = :color') - ->setParameter('color', $color) - ->distinct(true); + ->setParameter('color', $color); return $queryBuilder->getQuery()->getResult(); } diff --git a/src/AppBundle/Repository/Rebrickable/PartRepository.php b/src/AppBundle/Repository/Rebrickable/PartRepository.php index c4adac1..7e94362 100644 --- a/src/AppBundle/Repository/Rebrickable/PartRepository.php +++ b/src/AppBundle/Repository/Rebrickable/PartRepository.php @@ -3,7 +3,6 @@ namespace AppBundle\Repository\Rebrickable; use AppBundle\Entity\LDraw\Model; -use AppBundle\Entity\LDraw\Part; use AppBundle\Entity\Rebrickable\Category; use AppBundle\Entity\Rebrickable\Inventory; use AppBundle\Entity\Rebrickable\Inventory_Part; @@ -40,12 +39,12 @@ class PartRepository extends BaseRepository { $queryBuilder = $this->createQueryBuilder('part'); + $inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($number); + $queryBuilder ->join(Inventory_Part::class, 'inventory_part', JOIN::WITH, 'part.number = inventory_part.part') - ->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory_part.inventory = inventory.id') - ->join(Set::class, 's', Join::WITH, 'inventory.set = s.number') - ->where('s.number LIKE :number') - ->setParameter('number', $number) + ->where('inventory_part.inventory = :inventory') + ->setParameter('inventory', $inventory) ->distinct(true); return $queryBuilder->getQuery()->getResult(); diff --git a/src/AppBundle/Repository/Rebrickable/SetRepository.php b/src/AppBundle/Repository/Rebrickable/SetRepository.php index 3d3597b..cbe7e25 100644 --- a/src/AppBundle/Repository/Rebrickable/SetRepository.php +++ b/src/AppBundle/Repository/Rebrickable/SetRepository.php @@ -15,8 +15,6 @@ class SetRepository extends BaseRepository { public function findAllByTheme(Theme $theme) { - dump($this->getEntityManager()->getRepository(Theme::class)->findAllSubthemes($theme)); - $queryBuilder = $this->createQueryBuilder('s') ->join(Theme::class, 'theme', Join::WITH, 's.theme = theme') ->where('theme.id = :id') diff --git a/src/AppBundle/Service/SetService.php b/src/AppBundle/Service/SetService.php index 52cc9ce..a7f3ddf 100644 --- a/src/AppBundle/Service/SetService.php +++ b/src/AppBundle/Service/SetService.php @@ -30,7 +30,7 @@ { $models = []; - $inventoryParts = $this->inventoryPartRepository->findAllRegularBySetNumber($set->getNumber()); + $inventoryParts = $this->inventoryPartRepository->findAllBySetNumber($set->getNumber(), $spare, true); /** @var Inventory_Part $inventoryPart */ foreach ($inventoryParts as $inventoryPart) { @@ -58,7 +58,7 @@ { $models = []; - $inventoryParts = $this->inventoryPartRepository->findAllSpareBySetNumber($set->getNumber()); + $inventoryParts = $this->inventoryPartRepository->findAllBySetNumber($set->getNumber(), $spare, true); /** @var Inventory_Part $inventoryPart */ foreach ($inventoryParts as $inventoryPart) {