我想将此查询转换为cakephp
SELECT l.* , (
(
(
ACOS( SIN( (
$lat * PI( ) /180 ) ) * SIN( (
l.lat * PI( ) /180 )
) + COS( (
$lat * PI( ) /180 )
) * COS( (
l.lat * PI( ) /180 )
) * COS( (
( $lng - l.long ) * PI( ) /180 )
)
)
) *180 / PI( )
) *60 * 1.1515 * 1.609344
) AS `distance`
FROM hosts l
HAVING `distance` <= 50
ORDER BY `distance` ASC
请帮帮我 .....
如果我可以在contiions数组中添加它,那将更有帮助
$this->paginate = array('conditions' => $conditions ,
'order' => array('Host.distance' => 'ASC')
);
最佳答案
您可以在调用Model::find:
之前尝试重新定义虚拟字段。
// Controller code
$this->Note->virtualFields = array(
'distance' => "( 3959 * acos( cos( radians($lat) ) * cos( radians( Note.latitude ) ) * cos( radians( Note.longitude ) - radians($lng) ) + sin( radians($lat) ) * sin( radians( Note.latitude ) ) ) )"
);
$data = $this->Note->find('all', array('fields' => array('distance'), 'conditions' => array('distance <' => 1)));
如果可行,您可能需要创建一个模型方法来执行此操作
您也可以通过分页进行操作
关于php - 将MySQL查询转换为cakephp条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18442828/