<?php
declare(strict_types=1);
namespace Slivki\Repository\Sale;
use DateTimeImmutable;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
use Slivki\Entity\Sale;
final class SaleRepository extends ServiceEntityRepository implements SaleRepositoryInterface
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Sale::class);
}
public function findAllActiveSalesByCategoryId(int $categoryId): array
{
$queryBuilder = $this->createQueryBuilder('sale');
$expr = $queryBuilder->expr();
return $queryBuilder
->innerJoin('sale.categories', 'category')
->andWhere($expr->eq('category.ID', ':categoryId'))
->andWhere($expr->eq('sale.active', ':active'))
->andWhere($expr->between(':now', 'sale.since', 'sale.till'))
->setParameters([
'active' => true,
'categoryId' => $categoryId,
'now' => (new DateTimeImmutable())->format('Y-m-d H:i:s'),
])
->getQuery()
->getResult();
}
}