Symfony ile Doctrine'de Random Entity

Reading time ~1 minute

Symfony ile proje geliştirirken default ORM olarak Doctrine kullanıyoruz. Ancak Doctrine’de (native query yazmıyorsanız) random olarak entity çağırmanız mümkün olmuyor. Ancak bunun için ufak bi extension ekleyerek sorunu çözebiliyoruz.

use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\Parser;
use Doctrine\ORM\Query\SqlWalker;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;

class RandFunction extends FunctionNode
{
    public function parse(Parser $parser)
    {
        $parser->match(Lexer::T_IDENTIFIER);
        $parser->match(Lexer::T_OPEN_PARENTHESIS);
        $parser->match(Lexer::T_CLOSE_PARENTHESIS);
    }

    public function getSql(SqlWalker $sqlWalker)
    {
        return 'RAND()';
    }
}

İlk etapta yukarıda ki RandFunction classını oluşturmanız ve bundan sonra config.yml dosyamıza bir ayar çekmemiz gerekiyor.

orm:
        dql:
                numeric_functions:
                        Rand: Friend\Bundle\CoreBundle\DQL\RandFunction

Bunu yapmamızın ardından artık RAND() functionu Doctrine ile beraber otomatik olarak yüklü gelecek.

public function getRandomUser($limit)
{
    $qb = $this->getEntityManager()->createQueryBuilder();

    $qb->addSelect('user');
    $qb->addSelect('RAND() as HIDDEN rand')->orderBy('rand');


    $qb->from('AcmeUserBundle:User', 'user');

    $qb->setMaxResults($limit);


    return $qb->getQuery()->getResult();
 }

Ardından yukarıda ki örnekte olduğu gibi istediğiniz Entity’den random obje çekebilirsiniz.

Symfony 2 Object Entity Custom Choice Selected Value Sorunu

Symfony 2 Object Field Entity Custom Choice'un seçilen verisini alma sorunu. Continue reading

Daha Hızlı Web - Asenkron Javascript

Published on September 25, 2015