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;
        }
    }
}

Crontroller から呼び出されるリポジトリ関数:

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 に答える