Skip to content

Instantly share code, notes, and snippets.

@j
Created July 19, 2011 18:06
Show Gist options
  • Save j/1093299 to your computer and use it in GitHub Desktop.
Save j/1093299 to your computer and use it in GitHub Desktop.
Controller.php
doctrine:
dbal:
driver: %database_driver%
host: %database_host%
dbname: %database_name%
user: %database_user%
password: %database_password%
charset: UTF8
orm:
auto_generate_proxy_classes: %kernel.debug%
entity_managers:
default:
auto_mapping: true
dql:
string_functions:
rand_string: JStout\MainBundle\Component\Doctrine\DQL\Rand
<?php
[...]
$qb = $this->entityManager->createQueryBuilder();
$qb->select('o, oz')
->from('JStoutMainBundle:Offer', 'o')
->leftJoin('o.zones', 'oz')
->orderBy('RAND()');
$query = $qb->getQuery();
$query->setMaxResults(1);
$offer = $query->getSingleResult();
<?php
namespace JStout\MainBundle\Component\Doctrine\DQL;
use Doctrine\Common\Lexer;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
use Doctrine\ORM\Query\Parser;
use Doctrine\ORM\Query\SqlWalker;
/**
* RandFunction ::= "RAND" "(" ")"
*/
class Rand 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()';
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment