Symfony – Doctrine – Random result

Wiele razy podczas tworzenia portali opartych o Symfony zachodziła potrzeba by zrandomizować wyniki pobierane z bazy danych. Niestety doctrine w swoim standardzie nie ma wbudowanych takich funkcji jak RAND(), MAX(), MIN() czy bardzo często pożądany DAY(). Co więcej, próżno szukać zwięzłej i precyzyjnej odpowiedzi na przedstawiony problem nawet w dokumentacji Symfony i Doctrine. Na ratunek przychodzi DoctrineExtensions.


Instalacja jest bardzo prosta.
W katalogu głównym naszego projektu roboczego wywołujemy żądanie do composera

composer require beberlei/DoctrineExtensions

Następnie po przejsciu do katalogu app/config/config.yml, definiujemy nasze funkcje w następujący sposób:

doctrine:
     orm:
         dql:
             numeric_functions:
                 rand: DoctrineExtensions\Query\Mysql\Rand

Sam kod PHP może natomiast wyglądać następująco:

$movie = $this->getDoctrine()
                ->getEntityManager()
                ->createQueryBuilder('v')
                ->select('m')
                ->from('AppBundle:Movie', 'm')
                ->orderBy('RAND()')
                ->getQuery()
                ->setMaxResults(4)
                ->getResult();
Oceń ten artykuł:

Komentarze

Napisz komentarz

Required for comment verification