_tableName_ = 'airports'; parent::__construct($fromArray); } static function model() { return new self(); } public static function getNearest($lat, $lng) { $degrees = 3; $lat = floatval($lat); $lng = floatval($lng); $delta = (1+abs(SIN($lat/100)*SIN($lat/100)*5))*$degrees; $query = ' SELECT *, (POW(`lat`-:lat,2)+POW(`lng`-:lng,2)) AS `dist` FROM `airports` WHERE `lat` BETWEEN :minLat AND :maxLat AND `lng` BETWEEN :minLng AND :maxLng ORDER BY `dist` LIMIT 1;'; $res = App::DB()->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); $res->execute(array(':lat' => $lat, ':lng' => $lng, ':minLat' => $lat - $degrees, ':minLng' => $lng - $delta, ':maxLat' => $lat + $degrees, ':maxLng' => $lng + $delta)); if ($res && $row = $res->fetch(PDO::FETCH_ASSOC)) { return new Airports($row); } return null; return self::model()->getAll(array('where'=>'`lat`>0 AND `lng`>0', 'order','limit'=>1)); } }