$ virtualFields,CakePHP,获取变量

时间:2012-05-10 01:13:35

标签: cakephp

我的模型中有这个:

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从我的控制器传递到虚拟字段中的正确区域。我认为这将是直截了当但我无法弄清楚!

1 个答案:

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

如果有效,你可能想要创建一个模型方法,而不是污染控制器......