我在symfony2框架中使用doctrine2。我想选择单个随机字段。 我不想使用本机查询或使用PHP获取随机数。
我试图按照
进行此操作https://gist.github.com/Ocramius/919465
config.yml
中连接的扩展功能orm:
...
entity_managers:
default:
...
dql:
numeric_functions:
rand: MyProject\MyBundle\DQL\Rand
我尝试在控制器中调用查询
$product= $em->createQueryBuilder('p')
->select('w')
->from('MyBundle:Product', 'p')
// ->orderBy('RAND ()') // I tried so
->addSelect('RAND() as HIDDEN rand') // and so
->orderBy('rand')
->getQuery()
->getSingleResult();
我也尝试了
$product = $em->createQuery('SELECT p FROM MyBundle:Product p ORDER BY RAND()')
->setMaxResults(1)
->getSingleResult();
我收到错误:
Error: Expected end of string, got '('
请注意,“ASC”位于查询中的“RAND()”之后。 我试图调用orderBy('RAND()',''),但不成功......
答案 0 :(得分:1)
使用此捆绑包:https://github.com/mapado/MysqlDoctrineFunctions
您可以使用DQL查询中的功能:
$query = 'SELECT RAND(), ROUND(123.45)
FROM ...
';
$ EM->的createQuery($查询);
但你不能使用->orderBy
...
4.8.2。我可以通过DQL中的函数(例如ORDER BY RAND())进行排序吗?
不支持在DQL中按功能排序。如果您需要此功能,则应使用本机查询或提出其他解决方案。作为旁注:使用ORDER BY RAND()进行排序从1000行开始是非常缓慢的。