【发布时间】:2017-06-27 21:04:24
【问题描述】:
我的 symfony 项目中有一个实体,看起来像这样:
<?php
namespace AppBundle\Entity;
...
/**
* @ORM\Entity(repositoryClass="AppBundle\Repository\RestaurantRepository")
*/
class Restaurant {
use TimestampableTrait;
/**
* @ORM\Column(type="guid")
* @ORM\Id
* @ORM\GeneratedValue(strategy="UUID")
*/
protected $id;
/**
* @ORM\Column(type="float", nullable=true)
*/
protected $latitude;
/**
* @ORM\Column(type="float", nullable=true)
*/
protected $longitude;
}
我现在已经在我的 EntityRepository 中编写了一个原则查询来选择餐厅以及按位置排序的位置附近的距离。问题是,得到一个结果如下所示的数组:
[0] =>
(
[0] => distance1
[1] => restaurant1
)
[1] =>
(
[0] => distance2
[1] => restaurant2
)
我想,距离是餐厅的“虚拟”字段,所以结果数组应该是这样的:
[0] =>
(
[0] => restaurant1
)
[1] =>
(
[0] => restaurant2
)
我的教义查询:
$r = $this->createQueryBuilder('l');
$r
->select('l')
->addSelect(
'( 3959 * acos(cos(radians(' . $cord['latitude'] . '))' .
'* cos( radians( l.latitude ) )' .
'* cos( radians( l.longitude )' .
'- radians(' . $cord['longitude'] . ') )' .
'+ sin( radians(' . $cord['latitude'] . ') )' .
'* sin( radians( l.latitude ) ) ) ) as distance'
);
$r->orderBy('distance', 'ASC');
return $r->getQuery()->getResult();
感谢您的帮助!
【问题讨论】:
-
什么是
$cord,它来自哪里?一些数据库支持数据库级别的虚拟字段,但所有计算都必须从同一行的其他列中完成。
标签: php symfony doctrine-orm doctrine