Commit 2f76df42 authored by Nikita Chernykh's avatar Nikita Chernykh
Browse files

Merge branch 'develop' into 'master'

Фильтры Like, ILike, Range, In, Date, DateRange

See merge request !1
parents a6a10ac9 874105a0
Loading
Loading
Loading
Loading

src/Filter/Date.php

0 → 100644
+31 −0
Original line number Diff line number Diff line
<?php

declare(strict_types=1);

namespace IQDEV\Packages\DoctrineHttpFilter\Filter;

use Doctrine\ORM\QueryBuilder;
use IQDEV\Packages\DoctrineHttpFilter\HttpFilter;

final class Date extends HttpFilter
{
    public function addToQuery(QueryBuilder $queryBuilder): QueryBuilder
    {
        if (is_null($this->getHttpValue())) {
            return $queryBuilder;
        }

        if (! \DateTimeImmutable::createFromFormat('Y-m-d', $this->getHttpValue())) {
            return $queryBuilder;
        }

        $queryBuilder->where(
            $this->getColumn() . ' BETWEEN :dateStart AND :dateEnd',
        );

        $queryBuilder->setParameter('dateStart', $this->getHttpValue() . ' 00:00:00');
        $queryBuilder->setParameter('dateEnd', $this->getHttpValue() . ' 23:59:59');

        return $queryBuilder;
    }
}
+41 −0
Original line number Diff line number Diff line
<?php

declare(strict_types=1);

namespace IQDEV\Packages\DoctrineHttpFilter\Filter;

use Doctrine\ORM\QueryBuilder;
use IQDEV\Packages\DoctrineHttpFilter\HttpFilter;

final class DateRange extends HttpFilter
{
    public function addToQuery(QueryBuilder $queryBuilder): QueryBuilder
    {
        $httpValues = $this->getHttpValue();
        $fromDate = $httpValues['from'] ?? null;
        $toDate = $httpValues['to'] ?? null;

        if (is_null($fromDate) && is_null($toDate)) {
            return $queryBuilder;
        }

        $fromDate = \DateTimeImmutable::createFromFormat('Y-m-d', $fromDate ?? '');
        $toDate = \DateTimeImmutable::createFromFormat('Y-m-d', $toDate ?? '');

        if (! $fromDate && ! $toDate) {
            return $queryBuilder;
        }

        if ($fromDate) {
            $queryBuilder->where($this->getColumn() . ' >= :fromDate')
                ->setParameter('fromDate', $fromDate->setTime(0, 0, 0));
        }

        if ($toDate) {
            $queryBuilder->andWhere($this->getColumn() . ' <= :toDate')
                ->setParameter('toDate', $toDate->setTime(23, 59, 59));
        }

        return $queryBuilder;
    }
}

src/Filter/ILike.php

0 → 100644
+20 −0
Original line number Diff line number Diff line
<?php

declare(strict_types=1);

namespace IQDEV\Packages\DoctrineHttpFilter\Filter;

use Doctrine\ORM\QueryBuilder;
use IQDEV\Packages\DoctrineHttpFilter\HttpFilter;

final class ILike extends HttpFilter
{
    public function addToQuery(QueryBuilder $queryBuilder): QueryBuilder
    {
        $queryBuilder->where(
            $this->getColumn() . ' ILIKE \'%' . $this->getHttpValue() . '%\'',
        );

        return $queryBuilder;
    }
}

src/Filter/In.php

0 → 100644
+27 −0
Original line number Diff line number Diff line
<?php

declare(strict_types=1);

namespace IQDEV\Packages\DoctrineHttpFilter\Filter;

use Doctrine\ORM\QueryBuilder;
use IQDEV\Packages\DoctrineHttpFilter\HttpFilter;

final class In extends HttpFilter
{
    public function addToQuery(QueryBuilder $queryBuilder): QueryBuilder
    {
        if ($this->getHttpValue() === null || ! is_array($this->getHttpValue())) {
            return $queryBuilder;
        }

        $values = array_map(fn($value) => '\'' . $value . '\'', $this->getHttpValue());
        $stringValues = implode(',', $values);

        $queryBuilder->where(
            $this->getColumn() . ' IN (' . $stringValues . ')',
        );

        return $queryBuilder;
    }
}
+7 −1
Original line number Diff line number Diff line
@@ -11,10 +11,16 @@ final class Like extends HttpFilter
{
    public function addToQuery(QueryBuilder $queryBuilder): QueryBuilder
    {
        if ($this->getHttpValue() === null) {
            return $queryBuilder;
        }

        $queryBuilder->where(
            $this->getColumn() . ' LIKE \'%' . $this->getHttpValue() . '%\'',
            $this->getColumn() . ' LIKE :' . $this->getParameterKey(),
        );

        $queryBuilder->setParameter($this->getParameterKey(), '%' . $this->getHttpValue() . '%');

        return $queryBuilder;
    }
}
Loading