issues/27: update crud from admin api
This commit is contained in:
committed by
Valeriy Petrov
parent
839ccdffb5
commit
bc5468e5a0
@@ -4,6 +4,7 @@ namespace App\Repository;
|
||||
|
||||
use App\Entity\Article;
|
||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||
use Doctrine\ORM\QueryBuilder;
|
||||
use Doctrine\Persistence\ManagerRegistry;
|
||||
|
||||
/**
|
||||
@@ -16,58 +17,28 @@ class ArticleRepository extends ServiceEntityRepository
|
||||
parent::__construct($registry, Article::class);
|
||||
}
|
||||
|
||||
public function findByFilters(array $filters, int $page = 1, int $limit = 20): array
|
||||
/**
|
||||
* @param array<string, mixed> $filters
|
||||
*/
|
||||
public function createFilteredQueryBuilder(array $filters): QueryBuilder
|
||||
{
|
||||
$qb = $this->createQueryBuilder('a');
|
||||
$qb = $this->createQueryBuilder('a')->orderBy('a.id', 'DESC');
|
||||
|
||||
if (isset($filters['alias']) && $filters['alias'] !== '') {
|
||||
$qb->andWhere('a.alias = :alias')
|
||||
->setParameter('alias', $filters['alias']);
|
||||
}
|
||||
if (isset($filters['active']) && $filters['active'] !== '') {
|
||||
$qb->andWhere('a.active = :active')
|
||||
->setParameter('active', filter_var($filters['active'], FILTER_VALIDATE_BOOLEAN));
|
||||
}
|
||||
if (isset($filters['regionId']) && $filters['regionId'] !== '') {
|
||||
$qb->andWhere('a.regionId = :regionId')
|
||||
->setParameter('regionId', (int) $filters['regionId']);
|
||||
}
|
||||
ContentRepositoryFilter::applyCommon($qb, 'a', $filters);
|
||||
|
||||
$qb->orderBy('a.id', 'DESC');
|
||||
|
||||
$qb->setFirstResult(($page - 1) * $limit)
|
||||
->setMaxResults($limit);
|
||||
|
||||
return $qb->getQuery()->getResult();
|
||||
}
|
||||
|
||||
public function countByFilters(array $filters): int
|
||||
{
|
||||
$qb = $this->createQueryBuilder('a')
|
||||
->select('COUNT(a.id)');
|
||||
|
||||
if (isset($filters['alias']) && $filters['alias'] !== '') {
|
||||
$qb->andWhere('a.alias = :alias')
|
||||
->setParameter('alias', $filters['alias']);
|
||||
}
|
||||
if (isset($filters['active']) && $filters['active'] !== '') {
|
||||
$qb->andWhere('a.active = :active')
|
||||
->setParameter('active', filter_var($filters['active'], FILTER_VALIDATE_BOOLEAN));
|
||||
}
|
||||
if (isset($filters['regionId']) && $filters['regionId'] !== '') {
|
||||
$qb->andWhere('a.regionId = :regionId')
|
||||
->setParameter('regionId', (int) $filters['regionId']);
|
||||
}
|
||||
|
||||
return (int) $qb->getQuery()->getSingleScalarResult();
|
||||
return $qb;
|
||||
}
|
||||
|
||||
/**
|
||||
* Поиск статьи по alias с учётом возможных вариантов написания (исторический функционал).
|
||||
*/
|
||||
public function findOneByAlias(string $alias): ?Article
|
||||
{
|
||||
$alias = trim($alias);
|
||||
if ($alias === '') {
|
||||
return null;
|
||||
}
|
||||
|
||||
$variants = [
|
||||
$alias,
|
||||
$alias . '-',
|
||||
@@ -79,16 +50,18 @@ class ArticleRepository extends ServiceEntityRepository
|
||||
return $article;
|
||||
}
|
||||
}
|
||||
// Поиск по TRIM(alias) в БД (нативный SQL для совместимости с PostgreSQL)
|
||||
|
||||
// Фолбэк по TRIM(alias) в БД для совместимости со старыми данными.
|
||||
$conn = $this->getEntityManager()->getConnection();
|
||||
$id = $conn->fetchOne(
|
||||
'SELECT id FROM article WHERE TRIM(alias) = :alias LIMIT 1',
|
||||
['alias' => $alias],
|
||||
['alias' => \PDO::PARAM_STR]
|
||||
['alias' => \PDO::PARAM_STR],
|
||||
);
|
||||
if ($id !== false) {
|
||||
return $this->find($id);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user