From bfb1e4a8da943fc7218032ec5c79c546b07a3596 Mon Sep 17 00:00:00 2001 From: Hannes Matuschek Date: Sun, 30 Aug 2020 15:57:39 +0200 Subject: [PATCH] Fixed 'low-stock' stats. --- src/Repository/PartRepository.php | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Repository/PartRepository.php b/src/Repository/PartRepository.php index d6432a4c..452b54ec 100644 --- a/src/Repository/PartRepository.php +++ b/src/Repository/PartRepository.php @@ -42,6 +42,7 @@ declare(strict_types=1); namespace App\Repository; +use App\Entity\Parts\Part; use App\Entity\Parts\PartLot; use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\Query\ResultSetMapping; @@ -96,19 +97,18 @@ class PartRepository extends NamedDBElementRepository */ public function getPartCountWithLowStock(): int { - /* Query to get total amount for every part. - * As sub-queries are not supported -> resort to native SQL request.*/ - $rsm = new ResultSetMapping; - $rsm->addScalarResult("cnt", "count", 'integer'); - $query = $this->getEntityManager()->createNativeQuery(' - SELECT COUNT(DISTINCT parts.id) as cnt FROM parts - INNER JOIN ( - SELECT parts.id FROM part_lots - INNER JOIN parts ON parts.id=part_lots.id_part - GROUP BY parts.id - HAVING SUM(part_lots.amount)getEntityManager()->createQueryBuilder(); + $in->select("parts.id") + ->from(Part::class, "parts") + ->leftJoin("parts.partLots", "lots") + ->groupBy("parts.id") + ->having("SUM(lots.amount)getEntityManager()->createQueryBuilder(); + $qb->select("COUNT(part.id)") + ->from(Part::class, "part") + ->where($qb->expr()->in("part.id", $in->getDQL())); + + $query = $qb->getQuery(); return (int) ($query->getSingleScalarResult() ?? 0); }