<?php
declare(strict_types=1);
namespace Slivki\Repository\Director;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
use Slivki\Entity\Director;
use Slivki\Exception\Director\DirectorNotFoundException;
final class DirectorRepository extends ServiceEntityRepository implements DirectorRepositoryInterface
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Director::class);
}
public function findById(int $id): ?Director
{
$queryBuilder = $this->createQueryBuilder('director');
$expr = $queryBuilder->expr();
return $queryBuilder
->andWhere($expr->eq('director.ID', ':id'))
->setParameter(':id', $id)
->getQuery()
->getOneOrNullResult();
}
public function getById(int $id): Director
{
$director = $this->findById($id);
if (!$director instanceof Director) {
throw new DirectorNotFoundException();
}
return $director;
}
public function getByEmail(string $email): Director
{
$queryBuilder = $this->createQueryBuilder('director');
$expr = $queryBuilder->expr();
$director = $queryBuilder
->andWhere($expr->eq('director.email', ':email'))
->setParameter('email', $email)
->getQuery()
->getOneOrNullResult();
if (!$director instanceof Director) {
throw new DirectorNotFountException();
}
return $director;
}
}