我一直在使用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来尝试添加此参数但仍然获取实体(而不是标量结果)。之后,我遍历实体并逐个设置距离属性。
答案 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;