原则2:如何使用随机自定义函数



我在symfony2框架中使用doctrine2。我想选择单个随机字段。我不想使用本机查询或使用 PHP 获取随机查询。

我试图根据

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/dql-user-defined-functions.html

https://gist.github.com/Ocramius/919465

在 config.yml 中连接的扩展函数

orm:
    ...
    entity_managers:
        default:
            ...
            dql:
                numeric_functions:
                    rand: MyProjectMyBundleDQLRand

我尝试在控制器中调用查询

    $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()',''),但不成功...

使用此捆绑包: https://github.com/mapado/MysqlDoctrineFunctions

您可以使用 DQL 查询中的函数:

$query = 'SELECT RAND(), ROUND(123.45) 
    FROM ...
';

$em->createQuery($query);

但是你不能使用->orderBy...

4.8.2. 我可以在 DQL 中按函数(例如 ORDER BY RAND()))排序吗?

否,不支持在 DQL 中按函数排序。如果需要此功能,则应使用本机查询或提出其他解决方案。作为旁注:从 1000 行开始,使用 ORDER BY RAND() 排序非常缓慢。

http://docs.doctrine-project.org/en/2.1/reference/faq.html#can-i-sort-by-a-function-for-example-order-by-rand-in-dql

相关内容

  • 没有找到相关文章

最新更新