【问题标题】:symfony how to add a virtual column to my entitysymfony 如何向我的实体添加虚拟列
【发布时间】:2015-02-11 06:31:30
【问题描述】:

我一直在使用 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

【问题讨论】:

    标签: symfony doctrine-orm


    【解决方案1】:

    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;
    

    【讨论】:

    • 我能做的最好的事情是检索一个数组集合,其中每个项目都有实体和虚拟 col 值。这意味着我仍然必须手动遍历这些项目和 myEntity->setDistance() 。我不能告诉我的实体执行一些代码并在调用它时设置它自己的属性吗?
    猜你喜欢
    • 2013-02-03
    • 2015-08-31
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 2016-08-09
    • 2019-08-31
    相关资源
    最近更新 更多