0

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

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

4

1 回答 1

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

通过这种方式附加了一个虚拟字段,并将像任何其他普通字段一样检索并包含您的距离值。然后,您还可以按该字段排序/过滤。

于 2012-07-18T10:10:38.687 回答