如何在CakePHP中实现距离查询?

时间:2012-07-18 06:54:46

标签: sql cakephp cakephp-2.0 cakephp-2.1

我有一个查询(来自谷歌地图),如下:

SELECT ( 3959 * acos( cos( radians(MY_LAT) ) * cos( radians( LATITUDE ) ) * 
cos( radians( LONGITUDE ) - radians(MY_LONG) ) + sin( radians(MY_LAT) ) * sin( radians( 
LATITUDE ) ) ) ) AS distance
FROM zips
ORDER BY distance

我希望这是Cakephp中的自定义查找,所以我该怎么做?

MY_LAT和MY_LONG是传入的参数。 LATITUDE和LONGITUDE是拉链表中的列。

1 个答案:

答案 0 :(得分:1)

您可以使用地理编码器行为(https://github.com/dereuromark/tools/blob/2.0/Model/Behavior/GeocoderBehavior.php#L208)之类的行为,并使用

将其附加到您的模型
$this->Model->Behaviors->attach('Tools.Geocoder');

并致电

$this->Model->setDistanceAsVirtualField($lat, $lng, $fieldName);

这样一个虚拟字段被附加,并将像任何其他正常字段一样检索和包含您的距离值。你也可以按那个字段排序/过滤。