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 に答える