我遇到了一个简单的问题"使用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专业人士;)
答案 0 :(得分:1)
如果我理解正确,您可以为此编写原始SQL查询,或者在教义中实现ASIN(或任何其他)函数。
这里有一个可能有帮助的包:
https://github.com/wiredmedia/doctrine-extensions
您可以使用其ASIN功能的实现:
关于自定义DQL函数的文章:
http://symfony.com/doc/current/cookbook/doctrine/custom_dql_functions.html