Doctrine,QueryBuilder:使用特定的"其中"括号

时间:2014-04-17 10:11:07

标签: postgresql symfony doctrine-orm query-builder

我遇到了一个简单的问题"使用Doctrine QueryBuilder进行查询。 我试着找一些"人"最长10公里。

我的查询:

    $QB = $this->createQueryBuilder('p');
    $QB->add('select', 'p')
            ->add('from', 'MyProject\Bundle\FrontBundle\Entity\Pro p')
            ->where('p.job = :job')
            ->andWhere('(3956 * 2 * ASIN(SQRT( POWER(SIN((:latitude - abs(pro.latitude)) * pi()/180 / 2),2) + COS(:latitude * pi()/180 ) * COS(abs(pro.latitude) *  pi()/180) * POWER(SIN((:longitude - pro.longitude) *  pi()/180 / 2), 2) ))) <= 10')
            ->addOrderBy('p.dateCreation', 'DESC')
            ->addOrderBy('p.id', 'DESC')
            ->setParameter('latitude', $latitude)
            ->setParameter('longitude', $longitude)
            ->setParameter('job', $jobId);

问题在于第二个&#39;陈述,学说失败了&#34; ASIN&#34;因为下面的括号。它试图执行该功能...... 有办法逃脱吗?或者另一种构建这种情况的方法?

感谢Doctrine专业人士;)

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以为此编写原始SQL查询,或者在教义中实现ASIN(或任何其他)函数。

这里有一个可能有帮助的包:

https://github.com/wiredmedia/doctrine-extensions

您可以使用其ASIN功能的实现:

https://github.com/wiredmedia/doctrine-extensions/blob/master/lib/DoctrineExtensions/Query/Mysql/Asin.php

关于自定义DQL函数的文章:

http://symfony.com/doc/current/cookbook/doctrine/custom_dql_functions.html