0

我的模型中有这个:

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)));

这很好用.. 但现在我想将我的 get 变量 $lat 和 $lng 从我的控制器传递到虚拟字段中的正确区域。我认为这将是直截了当的,但我无法弄清楚!

4

1 回答 1

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)));

如果它有效,您可能需要创建一个模型方法来做到这一点,而不是污染控制器......

于 2012-05-10T01:29:16.223 回答