【问题标题】:Get an unmapped field in a native query in Doctrine2在 Doctrine2 的本机查询中获取未映射的字段
【发布时间】:2016-01-01 12:37:59
【问题描述】:

我在 Symfony3 中有一个带有 Doctrine2 的函数,它使用纬度和经度搜索最近的伙伴:

public function findNearestPartner($lat,$lng) {

    $rsm=new ResultSetMappingBuilder($this->_em);
    $rsm->addRootEntityFromClassMetadata('AppBundle\Entity\Partner','p');

    $sqlQuery="SELECT p.*, (6371 * acos(cos(radians(:lat)) * cos(radians(p.latitude)) * cos(radians(p.longitude) - radians(:lng)) + sin(radians(:lat)) * sin(radians(p.latitude)))) AS distance
    FROM sp_partner p
    ORDER BY distance ASC
    LIMIT 0,1";

    $query=$this->_em
        ->createNativeQuery($sqlQuery,$rsm)
        ->setParameter('lat',$lat)
        ->setParameter('lng',$lng)
    ;

    return $query->getOneOrNullResult();
}

如您所见,我得到了最近的合作伙伴实体 - 但也有“距离”字段,我没有返回(但它会非常有用)。有什么方法可以获取该字段的值吗? 我阅读了文档 (http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/native-sql.html),但我找不到任何对这种情况有用的东西。

【问题讨论】:

    标签: doctrine-orm symfony


    【解决方案1】:

    您可以通过addScalarResult 成功。

    $rsm=new ResultSetMappingBuilder($this->_em);
    $rsm->addRootEntityFromClassMetadata('AppBundle\Entity\Partner','p');
    $rsm->addScalarResult('distance', 'distance');
    

    结果是

    array:2 [▼
      0 => Partner{...},
      distance => xxx
    ]
    

    【讨论】:

      猜你喜欢
      • 2015-06-08
      • 2012-04-06
      • 2016-05-02
      • 2019-04-05
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多