Php 使用ORM将距离SQL函数转换为蛋糕友好查询
我正在尝试将下面的SQL字符串转换为Cake find查询。 有没有一个简单的方法可以做到这一点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 *
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,然后您可以像普通查找一样更轻松地进行查询。。。。