如何在 Doctrine 查询构建器中使用函数

问题描述

在我的 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