added some exception handling

This commit is contained in:
tracer 2022-11-01 16:15:23 +01:00
parent 08ab8c3376
commit d5b429da81
1 changed files with 31 additions and 19 deletions

View File

@ -4,7 +4,10 @@ namespace App\Repository;
use App\Entity\Quotes; use App\Entity\Quotes;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\DBAL\Query\QueryBuilder;
use Doctrine\ORM\NonUniqueResultException;
use Doctrine\Persistence\ManagerRegistry; use Doctrine\Persistence\ManagerRegistry;
use Exception;
/** /**
* @method Quotes|null find($id, $lockMode = null, $lockVersion = null) * @method Quotes|null find($id, $lockMode = null, $lockVersion = null)
@ -21,7 +24,7 @@ class QuotesRepository extends ServiceEntityRepository
public function add(Quotes $entity, bool $flush = true): void public function add(Quotes $entity, bool $flush = true): void
{ {
$this->_em->persist($entity); $this->_em->persist(entity: $entity);
if ($flush) { if ($flush) {
$this->_em->flush(); $this->_em->flush();
} }
@ -29,31 +32,40 @@ class QuotesRepository extends ServiceEntityRepository
public function remove(Quotes $entity, bool $flush = true): void public function remove(Quotes $entity, bool $flush = true): void
{ {
$this->_em->remove($entity); $this->_em->remove(entity: $entity);
if ($flush) { if ($flush) {
$this->_em->flush(); $this->_em->flush();
} }
} }
/** public function findOneRandom(): ?QueryBuilder
* @return float|int|mixed|string|null
*
* @throws \Doctrine\ORM\NonUniqueResultException
*/
public function findOneRandom(): mixed
{ {
try {
$idLimits = $this->createQueryBuilder(alias: 'q') $idLimits = $this->createQueryBuilder(alias: 'q')
->select('MIN(q.id)', 'MAX(q.id)') ->select('MIN(q.id)', 'MAX(q.id)')
->getQuery() ->getQuery()
->getOneOrNullResult(); ->getOneOrNullResult();
$randomPossibleId = random_int(min: $idLimits[1], max: $idLimits[2]); } catch (NonUniqueResultException) {
$idLimits = 0;
}
try {
$randomPossibleId = random_int(min: $idLimits[1], max: $idLimits[2]);
} catch(Exception) {
$randomPossibleId = 0; // return first, if any
}
try {
return $this->createQueryBuilder(alias: 'q') return $this->createQueryBuilder(alias: 'q')
->where(predicates: 'q.id >= :random_id') ->where(predicates: 'q.id >= :random_id')
->setParameter(key: 'random_id', value: $randomPossibleId) ->setParameter(key: 'random_id', value: $randomPossibleId)
->setMaxResults(maxResults: 1) ->setMaxResults(maxResults: 1)
->getQuery() ->getQuery()
->getOneOrNullResult(); ->getOneOrNullResult();
} catch (NonUniqueResultException) {
// max results is 1
return null;
}
} }
// /** // /**