mirror of
https://github.com/ToxicCrack/PrintABrick.git
synced 2025-05-17 21:00:09 -07:00
Improve repository queries
This commit is contained in:
parent
71b362b346
commit
6c495d1f28
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
||||
if($spare !== null) {
|
||||
$queryBuilder
|
||||
->andWhere('inventory_part.spare = :spare')
|
||||
->setParameter('spare', $spare);
|
||||
}
|
||||
|
||||
public function findAllSpareBySetNumber($number)
|
||||
{
|
||||
$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 = 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();
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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')
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user