Как найти все условия запроса в cakephp со значениями больше и меньше, чем равными

Мне нужно получить все данные из таблицы, в которой есть значения широты/долготы. На самом деле мне просто нужны все значения широты/долготы, которые находятся в пределах 1000 миль от источника, поэтому для этого я использовал концепцию, и она правильно вычисляет широту/долготу, но когда я создание запроса на поиск для получения данных, которые имеют table.latitudes ‹= широты севера и table.latitudes >= широты юга

Аналогично для долготы.

Я сделал этот код расчета и нашел запрос

 $lat1 = $coodSearch['lat'];
       $lon1 = $coodSearch['long'];
       $d = $coodSearch['dis'];
       $r = 3959;//earth's radius in miles

          //compute max and min latitudes / longitudes for search square
                $latN = rad2deg(asin(sin(deg2rad($lat1)) * cos($d / $r) + cos(deg2rad($lat1)) * sin($d / $r) * cos(deg2rad(0))));
                $latS = rad2deg(asin(sin(deg2rad($lat1)) * cos($d / $r) + cos(deg2rad($lat1)) * sin($d / $r) * cos(deg2rad(180))));
                $lonE = rad2deg(deg2rad($lon1) + atan2(sin(deg2rad(90)) * sin($d / $r) * cos(deg2rad($lat1)), cos($d / $r) - sin(deg2rad($lat1)) * sin(deg2rad($latN))));
                $lonW = rad2deg(deg2rad($lon1) + atan2(sin(deg2rad(270)) * sin($d / $r) * cos(deg2rad($lat1)), cos($d / $r) - sin(deg2rad($lat1)) * sin(deg2rad($latN))));

          $this->loadModel('City');
         $finder1 = array( 'and' => array('City.latitude <=' => $latN,'City.latitude >=' => $latS ));
         $latArr = $this->City->find('all', array('conditions' => $finder1));
         $finder2 = array( 'and' => array('City.longitude >=' => $lonE,'City.longitude <=' => $lonW ));
         $longArr = $this->City->find('all', array('conditions' => $finder2));

Я проверил вычисленное значение ($ latN, $ lonE), которое дает результат, но обнаружил, что все запросы не работают.

Пожалуйста, помогите мне, где я ошибаюсь.


person Ankit    schedule 21.12.2014    source источник
comment
Не работает — неправильное описание проблемы.   -  person ndm    schedule 21.12.2014
comment
Совет: если вы не хотите изобретать велосипед, вы можете использовать простой в интеграции поведение здесь: $this->setDistanceAsVirtualField($lat, $lng); и оно будет работать из коробки. Вы также можете использовать поведение, чтобы узнать, как будет построен такой запрос.   -  person mark    schedule 21.12.2014


Ответы (1)


Это может помочь

$data = $this->ModelName->find('all', array('conditions' => array('ModelName.DbColumn >=' => 10)));
$data = $this->ModelName->find('all', array('conditions' => array('ModelName.DbColumn <=' => 10)));
$data = $this->ModelName->find('all', array('conditions' => array('ModelName.DbColumn >=' => 10,'ModelName.DbColumn <=' => 20)));
person Keyur Padalia    schedule 23.12.2014