Files
crowd-fund-api/src/Repository/FindByIdOrSlugTrait.php
T
daniel.subiabre ac47aec378 feat: Themes (#257)
* feat: add trait to unify get by id or slug logic

* feat: add Theme resource

* fix: categories and themes

* feat: update api docs for projects to themes relationship

* feat: update doctrine relationship of projects to themes

* feat: add v3 categories to v4 themes pumping during projects pumping
2026-10-08 13:02:07 +02:00

37 lines
895 B
PHP

<?php
namespace App\Repository;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\QueryBuilder;
/**
* @template T of object
*
* @mixin ServiceEntityRepository
*/
trait FindByIdOrSlugTrait
{
/**
* @return T|null
*/
public function findOneByIdOrSlug(mixed $idOrSlug): ?object
{
if (\ctype_digit((string) $idOrSlug)) {
return $this->find($idOrSlug);
}
return $this->findOneBy(['slug' => $idOrSlug]);
}
public function getByIdOrSlugQuery(mixed $idOrSlug): QueryBuilder
{
/** @var QueryBuilder */
$queryBuilder = $this->createQueryBuilder('o');
$queryBuilder->where(\ctype_digit((string) $idOrSlug) ? 'o.id = :idOrSlugField' : 'o.slug = :idOrSlugField');
$queryBuilder->setParameter('idOrSlugField', $idOrSlug);
return $queryBuilder;
}
}