2012-07-18 68 views
0

我有一个查询(从谷歌地图),像这样:如何实现CakePHP中距离查询?

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是拉链表中的列。

+2

使它成为一个虚拟字段,则只是从你的查找查询选择相应的字段。 – tigrang 2012-07-18 07:06:10

回答

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

这样一个虚拟的现场连接,并且将检索和含有就像任何其他正常场的距离值。您还可以通过该字段进行排序/过滤器即可。