0

我有一个本机查询,想要用我的查询结果填充一个 ResultSetMapping 对象。一切都按预期工作,但字段“距离”。结果数组中的字段始终为空。当我直接在 MySQL 中运行查询时,会出现“距离”的结果,所以我猜我的 SQL 没问题?

class PlaceRepository extends EntityRepository
{
    public function getAllWithMainImage($lat, $lon)
    {
        try
        {
            $rsm = new ResultSetMapping;
            $rsm->addScalarResult('slug', 'slug');
            $rsm->addScalarResult('title', 'title');
            $rsm->addScalarResult('rating', 'rating');
            $rsm->addScalarResult('visited_at', 'visited_at');
            $rsm->addScalarResult('img', 'img');
            $rsm->addScalarResult('distance', 'distance');

            return $this->getEntityManager()
                ->createNativeQuery('SELECT p.slug, p.title, p.rating, p.visited_at, pp.file AS img, ROUND(GLength(
                        LineString(
                            p.place_point, 
                            GeomFromText("POINT(:lat :lon)")
                        )
                    ) * 111.12, 1) AS distance
                    FROM place p 
                    LEFT JOIN place_picture AS pp
                    ON p.id = pp.place_id
                    GROUP BY p.id
                    ORDER BY distance
                    LIMIT 20', $rsm)
                ->setParameter('lat', $lat)
                ->setParameter('lon', $lon)
                ->getResult();
        }
        catch(\Doctrine\ORM\NoResultException $e)
        {
            return false;
        }
    }
}

从 Cronroller 调用的存储库函数:

class PlaceRestController extends Controller
{
    public function getPlacesAction(ParamFetcher $paramFetcher)
    {
        $view = FOSView::create();
        $view->setHeader('Access-Control-Allow-Origin', '*');
        $em = $this->getDoctrine()->getManager();
        $data = $em->getRepository('TouringPlaceBundle:Place')->getAllWithMainImage(48.39227479328352, 9.985520839691162); //hard-coded for debugging
        print_r($data);  //… [img] => xzz.jpg, [distance] =>
        if($data)
        {
            $view->setStatusCode(200)->setData($data);
        }
        return $view;
    }
}

我的错误在哪里?

4

1 回答 1

0

您可以在调用此方法的位置添加代码部分吗?返回值去哪儿了?在实体中?

即使我不这么认为,问题也可能来自多个引号,因此 :lat 和 :lon 不会更改为您希望它们成为的值。您是否检查了探查器以确保它们已被替换?

于 2013-04-29T07:52:05.210 回答