mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-08-21 23:23:51 +00:00
crudification + corrections on thirdparty
This commit is contained in:
@@ -2,23 +2,26 @@
|
||||
|
||||
namespace Chill\ThirdPartyBundle\Repository;
|
||||
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Doctrine\ORM\EntityRepository;
|
||||
use Doctrine\ORM\QueryBuilder;
|
||||
use Doctrine\ORM\Query;
|
||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||
use Doctrine\Persistence\ManagerRegistry;
|
||||
use Chill\ThirdPartyBundle\Entity\ThirdParty;
|
||||
use Doctrine\Persistence\ObjectRepository;
|
||||
|
||||
|
||||
class ThirdPartyRepository extends ServiceEntityRepository
|
||||
final class ThirdPartyRepository implements ObjectRepository
|
||||
{
|
||||
public function __construct(ManagerRegistry $registry)
|
||||
private EntityRepository $repository;
|
||||
|
||||
public function __construct(EntityManagerInterface $em)
|
||||
{
|
||||
parent::__construct($registry, ThirdParty::class);
|
||||
$this->repository = $em->getRepository(ThirdParty::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* count amongst parties associated to $centers, with $terms parameters
|
||||
*
|
||||
*
|
||||
* @param array $centers
|
||||
* @param type $terms
|
||||
* @return int
|
||||
@@ -27,24 +30,24 @@ class ThirdPartyRepository extends ServiceEntityRepository
|
||||
{
|
||||
$qb = $this->buildQuery($centers, $terms);
|
||||
$qb->select('COUNT(tp)');
|
||||
|
||||
|
||||
return $qb->getQuery()->getSingleScalarResult();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Search amongst parties associated to $centers, with $terms parameters
|
||||
*
|
||||
*
|
||||
* Different format for return:
|
||||
* - ['entity']: return the entity hydrated as objects
|
||||
* - ['array', [ DQL ]: return objects hydrated as entity, with
|
||||
* - ['array', [ DQL ]: return objects hydrated as entity, with
|
||||
* an array describing the fields as DQL.
|
||||
*
|
||||
*
|
||||
* supported terms:
|
||||
*
|
||||
*
|
||||
* - name or _default: containing the name (name LIKE %string%)
|
||||
* - is_active: is active = true / false
|
||||
* - types: an array of types
|
||||
*
|
||||
*
|
||||
* @param array $centers
|
||||
* @param int $firstResult
|
||||
* @param int $maxResults
|
||||
@@ -74,43 +77,43 @@ class ThirdPartyRepository extends ServiceEntityRepository
|
||||
break;
|
||||
default:
|
||||
throw new \DomainException("This return format is invalid");
|
||||
}
|
||||
}
|
||||
$qb->setFirstResult($firstResult)
|
||||
->setMaxResults($maxResults);
|
||||
|
||||
|
||||
return $qb->getQuery()->getResult();
|
||||
}
|
||||
|
||||
|
||||
protected function createMemberOfCentersQuery($centers): QueryBuilder
|
||||
{
|
||||
$qb = $this->createQueryBuilder('tp');
|
||||
|
||||
|
||||
$or = $qb->expr()->orX();
|
||||
|
||||
|
||||
foreach ($centers as $center) {
|
||||
$or->add($qb->expr()->isMemberOf(':center_'.$center->getId(), 'tp.centers'));
|
||||
$qb->setParameter('center_'.$center->getId(), $center);
|
||||
}
|
||||
|
||||
|
||||
$qb->where($or);
|
||||
|
||||
|
||||
return $qb;
|
||||
}
|
||||
|
||||
|
||||
protected function buildQuery($centers, $terms): QueryBuilder
|
||||
{
|
||||
$qb = $this->createMemberOfCentersQuery($centers);
|
||||
$this->setNameCondition($qb, $terms);
|
||||
$this->setTypesCondition($qb, $terms);
|
||||
$this->setIsActiveCondition($qb, $terms);
|
||||
|
||||
|
||||
return $qb;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add parameters to filter by containing $terms["name"] or
|
||||
* Add parameters to filter by containing $terms["name"] or
|
||||
* $terms["_default"]
|
||||
*
|
||||
*
|
||||
* @param QueryBuilder $qb
|
||||
* @param array $terms
|
||||
*/
|
||||
@@ -125,7 +128,7 @@ class ThirdPartyRepository extends ServiceEntityRepository
|
||||
$qb->setParameter('name', '%'.$term.'%');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected function setTypesCondition(QueryBuilder $qb, array $terms)
|
||||
{
|
||||
if (\array_key_exists('types', $terms)) {
|
||||
@@ -137,14 +140,55 @@ class ThirdPartyRepository extends ServiceEntityRepository
|
||||
$qb->andWhere($orx);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected function setIsActiveCondition(QueryBuilder $qb, array $terms)
|
||||
{
|
||||
if (\array_key_exists('is_active', $terms)) {
|
||||
$qb->andWhere(
|
||||
$terms['is_active'] ? $qb->expr()->eq('tp.active', "'TRUE'") :
|
||||
$terms['is_active'] ? $qb->expr()->eq('tp.active', "'TRUE'") :
|
||||
$qb->expr()->eq('tp.active', "'FALSE'")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public function find($id): ?ThirdParty
|
||||
{
|
||||
return $this->repository->find($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array|ThirdParty[]
|
||||
*/
|
||||
public function findAll(): array
|
||||
{
|
||||
return $this->repository->findAll();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $criteria
|
||||
* @param array|null $orderBy
|
||||
* @param null $limit
|
||||
* @param null $offset
|
||||
* @return array|ThirdParty[]
|
||||
*/
|
||||
public function findBy(array $criteria, ?array $orderBy = null, $limit = null, $offset = null): array
|
||||
{
|
||||
return $this->repository->findBy($criteria, $orderBy, $limit, $offset);
|
||||
}
|
||||
|
||||
public function findOneBy(array $criteria): ?ThirdParty
|
||||
{
|
||||
return $this->repository->findOneBy($criteria);
|
||||
}
|
||||
|
||||
public function getClassName(): string
|
||||
{
|
||||
return ThirdParty::class;
|
||||
}
|
||||
|
||||
public function createQueryBuilder(string $alias, ?string $indexBy = null): QueryBuilder
|
||||
{
|
||||
return $this->repository->createQueryBuilder($alias, $indexBy);
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user