我想在CakePHP查找查询中使用hasrsine公式来返回给定半径和纬度/经度对的位置。我刚刚阅读了CakePHP中的虚拟字段,但在我的情况下,我需要传递这3个参数。我该如何解决这个问题?
public $virtualFields = array(
'distance' => '( 3959 * acos( cos( radians(37) ) * cos( radians( Location.latitude ) ) * cos( radians( Location.longitude ) - radians(-122) ) + sin( radians(37) ) * sin( radians( Location.latitude ) ) ) )',
);
上面的虚拟字段工作正常,它返回从表中的点到公式中指定的值的距离(37,-122)。现在我该怎样才能动态改变这个值!?
答案 0 :(得分:1)
它对我来说是这样的:
$this->Location->virtualFields['distance'] = '( 3959 * acos( cos( radians(' . $latitude . ')
) * cos( radians( Location.latitude ) ) * cos(
radians( Location.longitude ) - radians(' . $longitude . ') ) + sin( radians(' .
$latitude . ') ) * sin( radians(
Location.latitude ) ) ) )';
它动态地从Controller动态分配虚拟字段。