Php 条令/MySQL:结果映射中缺少字段
我有一个本机查询,希望用查询结果填充ResultsMapping对象。 一切正常,但字段“距离”无效。结果数组中的字段始终为空。当我直接在MySQL中运行查询时,会有“距离”的结果,所以我想我的SQL是可以的Php 条令/MySQL:结果映射中缺少字段,php,mysql,symfony,doctrine,Php,Mysql,Symfony,Doctrine,我有一个本机查询,希望用查询结果填充ResultsMapping对象。 一切正常,但字段“距离”无效。结果数组中的字段始终为空。当我直接在MySQL中运行查询时,会有“距离”的结果,所以我想我的SQL是可以的 class PlaceRepository extends EntityRepository { public function getAllWithMainImage($lat, $lon) { try { $rsm
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;
}
}
我的错误在哪里?您能添加调用此方法的代码部分吗? 返回值在哪里?在实体中
即使我不这么认为,问题也可能来自倍数引号,因此:lat和:lon不会更改为您希望的值。您是否已检查探查器以确保它们已被替换?刚刚添加了更多代码。返回值将转到ResultsMapping中的标量结果。它将由FOSRestBundle转换为JSON(我把代码附在后面是我的主要帖子)。:lat和:lon未正确更换。奇怪的是探查器中的[Display runnable query]显示了正确的语句(如前所述,我已经测试过了)。