我的模型中有这个:
public $virtualFields = array(
'distance' => '( 3959 * acos( cos( radians(40.722803) ) * cos( radians( Note.latitude ) ) * cos( radians( Note.longitude ) - radians(-73.591082) ) + sin( radians(40.722803) ) * sin( radians( Note.latitude ) ) ) )'
);
在我的控制器中:
$data = $this->Note->find('all', array('fields' => array('distance'), 'conditions' => array('distance <' => 1)));
这很好..但是现在我想把我的获取变量$ lat和$ lng从我的控制器传递到虚拟字段中的正确区域。我认为这将是直截了当但我无法弄清楚!
答案 0 :(得分:3)
据我所知,虚拟字段的设计并不是为了解决这个问题,因为从数据库的角度来看,变量实际上是常量。
我不确定这是否有效,但您可以在调用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)));
如果有效,你可能想要创建一个模型方法,而不是污染控制器......