问题描述
在我的 symfony 项目中,我使用 Doctrine QueryBuilder
搜索数据库中的数据:
public function search($name)
{
return $this->createqueryBuilder('Town')
->andWhere('Town.name LIKE :name')
->setParameter('name','%' . $name . '%')
->getQuery()
->execute();
}
城镇表有 3 个字段:名称、纬度和经度。
结果为我提供了具有特定名称的城镇列表。
现在我想通过在我的查询中添加坐标来更进一步。查询的 sql
版本将是:
SELECT name,SQRT(POWER(48.562370 - latitude,2) + POWER(7.761280 - longitude,2)) as radius from Town
HAVING radius is not null AND radius < 0.01
ORDER by radius limit 50
但我不知道如何将 SQRT
函数与 QueryBuilder
一起使用。
解决方法
你可以试试:
$rsm = new ResultSetMapping();
$rsm->addScalarResult('radius','0.01');
$query = $this->getEntityManager()->createNativeQuery(
"SELECT name,SQRT(POWER(48.562370 - latitude,2) + POWER(7.761280 - longitude,2)) as radius
FROM Town
HAVING radius is not null AND radius < :radius
ORDER by radius limit 50",$rsm
)
->getArrayResult();
https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/native-sql.html