1

このクエリを Cakephp に変換したい

SELECT l.* , (
                (
                (
                ACOS( SIN( (
                $lat * PI( ) /180 ) ) * SIN( (
                l.lat * PI( ) /180 )
                ) + COS( (
                $lat * PI( ) /180 )
                ) * COS( (
                l.lat * PI( ) /180 )
                ) * COS( (
                ( $lng  -  l.long ) * PI( ) /180 )
                )
                )
                ) *180 / PI( )
                ) *60 * 1.1515 * 1.609344
                ) AS  `distance` 
                FROM  hosts l 
                HAVING  `distance` <= 50
                ORDER BY  `distance` ASC

助けてください.....のようにcontiions配列に追加できればもっと助かります

$this->paginate = array('conditions' => $conditions , 
                                        'order' => array('Host.distance' => 'ASC')
                                    );
4

1 に答える 1

0

呼び出す前に、仮想フィールドの再定義を試みることができます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)));

それが機能する場合は、おそらくそれを行うためのモデル メソッドを作成する必要があります。

また、ページネーションでも行うことができます。

于 2013-08-26T11:31:28.333 に答える