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;
}
}
私の間違いはどこですか?