. */ namespace App\Repository\Parts; use App\Entity\Parts\Part; use App\Entity\Parts\StorageLocation; use App\Repository\AbstractPartsContainingRepository; use Doctrine\ORM\QueryBuilder; use InvalidArgumentException; class StorelocationRepository extends AbstractPartsContainingRepository { public function getParts(object $element, string $nameOrderDirection = "ASC"): array { if (!$element instanceof StorageLocation) { throw new InvalidArgumentException('$element must be an Storelocation!'); } $qb = new QueryBuilder($this->getEntityManager()); $qb->select('part') ->from(Part::class, 'part') ->leftJoin('part.partLots', 'lots') ->where('lots.storage_location = ?1') ->setParameter(1, $element) ->orderBy('NATSORT(part.name)', $nameOrderDirection) ; return $qb->getQuery()->getResult(); } public function getPartsCount(object $element): int { if (!$element instanceof StorageLocation) { throw new InvalidArgumentException('$element must be an Storelocation!'); } $qb = new QueryBuilder($this->getEntityManager()); $qb->select('COUNT(part.id)') ->from(Part::class, 'part') ->leftJoin('part.partLots', 'lots') ->where('lots.storage_location = ?1') ->setParameter(1, $element); return (int) $qb->getQuery()->getSingleScalarResult(); } }