symfony如何向我的实体添加虚拟列

时间:2014-12-12 14:11:58

标签: symfony doctrine-orm

我一直在使用symfony框架,并想为我的实体添加一个“虚拟列”。我将尝试用纯SQL来说明我的要求:

SELECT l.id, l.latlng FROM locations AS l

在具有id,latlng属性的位置数组中生成结果。假设我想按某个起点(latlng_start)的距离对结果进行排序,我会修改这个:

SELECT l.id,
   l.latlng,
   (calculation using **l.latlng** and given **[latlng_start]**) AS distance
FROM locations AS l
ORDER BY l.distance ASC

这将导致首先位置最近的位置数组。

在symfony框架内,为了教育,我创建了一个具有以下属性的位置实体:id,latlng和distance。其中id是自动的,latlng一个字符串值并且不保持距离。

如何告诉我的实体计算从数据库中抓取的距离?

我的猜测是;使用实体构造函数使用latlng和给定参数设置距离。

在我当前的解决方案(不满足我)中,我使用createNativeQuery和rsm来尝试添加此参数但仍然获取实体(而不是标量结果)。之后,我遍历实体并逐个设置距离属性。

the code on github

1 个答案:

答案 0 :(得分:0)

surveyssum是虚拟的

$repository = $this->getDoctrine()
            ->getRepository('XXXBundle:Trial');

        $query = $repository->createQueryBuilder('t')
            ->select("sum(t.number_surveys) as surveyssum")
            ->where('t.study_id = :id')
            ->setParameter('id', $studyId)
            ->getQuery();

        $result = $query->getResult();

        $sum = $result[0]['surveyssum']; 

        return $sum;