Php 使用ORM将距离SQL函数转换为蛋糕友好查询

Php 使用ORM将距离SQL函数转换为蛋糕友好查询,php,mysql,cakephp,Php,Mysql,Cakephp,我正在尝试将下面的SQL字符串转换为Cake find查询。 有没有一个简单的方法可以做到这一点 SELECT longitude, latitude, firstname, surname, profile_pic, facebook_id, distance FROM (SELECT longitude, latitude, firstname, surname, profile_pic, facebook_id, 6371 *

我正在尝试将下面的SQL字符串转换为Cake find查询。 有没有一个简单的方法可以做到这一点

SELECT longitude, latitude, firstname, surname, profile_pic, facebook_id, distance 
                FROM 
              (SELECT longitude, latitude, firstname, surname, profile_pic, facebook_id, 6371 * ACos( Cos( RADIANS( users.latitude ) ) * Cos( RADIANS( $latitude ) ) * Cos( RADIANS( $longitude ) - RADIANS( users.longitude ) ) + Sin( RADIANS( users.latitude ) ) * Sin( RADIANS( $latitude ) ) ) AS distance
               FROM users
              ) as users
              WHERE distance <=2 AND facebook_id != $facebook
              ORDER BY distance
              LIMIT 20

我有一个代码段做了类似的事情:

$GeoCache->virtualFields = array(
    'distance' => "SQRT(POW(UserGeolocationCache.latitude - {$latitude},2) + POW(UserGeolocationCache.longitude - {$longitude},2))"
);
$users = $GeoCache->find('all', array(
    'conditions' => array('distance <' => '0.05'),
    'order' => array('distance asc'),
    'contain' => array('User'),
));

TL;DR只需将您的距离计算结果填入虚拟字段中并在其上进行搜索。

为什么必须在“查找”查询中进行搜索?您可以保持原样,改用查询。您必须使用子查询进行查询,或者将查询更改为具有距离的cluase,然后您可以像普通查找一样更轻松地进行查询。。。。