У меня возникла проблема при разработке этого.Выполнение запроса на расстояние haversine на основе lng и lat
У меня есть эта функция реализована сфера, что я бегу на модели как
листинга :: ближайший ($ лат, $ LNG) -> постраничной (5);
public function scopeClosest($query, $lat, $lng, $distance = 0, $units = 'km')
{
switch ($units) {
case 'miles':
//radius of the great circle in miles
$gr_circle_radius = 3959;
break;
case 'km':
//radius of the great circle in kilometers
$gr_circle_radius = 6371;
break;
}
return $query->selectRaw(
'*, ('.$gr_circle_radius.' * acos(cos(radians('.$lat.')) * cos(radians(lat)) * cos(radians(lng) - radians('.$lng.')) + sin(radians('.$lat.')) * sin(radians(lat)))) AS distance'
)->havingRaw("distance < ?", [10]);
}
Однако я бегу в эту ошибку, что я сейчас не как исправить
SQLSTATE [42S22]: Column не найдено: 1054 Unknown столбца 'расстояние' в 'имеет пункт' (SQL: выберите COUNT (*) в качестве заполнителя из
listings
имеющих расстояние < 10)
кажется, что Laravel запущен 2 запросов, это то, как это выглядит, если я не использую havingRaw()
array:2 [▼
0 => array:3 [▼
"query" => "select count(*) as aggregate from `listings`"
"bindings" => []
"time" => 0.48
]
1 => array:3 [▼
"query" => "select *, (3959 * acos(cos(radians(37)) * cos(radians(lat)) * cos(radians(lng) - radians(-122)) + sin(radians(37)) * sin(radians(lat)))) AS distance from `listings` limit 5 offset 0"
"bindings" => []
"time" => 0.97
]
]
Когда я использую hasRaw, кажется, что laravel применяет его к первому запросу, и, конечно же, он не сработает. Но почему он применяет его к первому запросу, а не к второму?
, что это ваше требование, пожалуйста, вы можете объяснить немного? Вы хотите получить ближайшие 5 местоположений на основе заданной широты и долготы? – sumit
5 просто пример, мне нужно это разбито на страницы –
[Вы можете получить мой ответ здесь] (http://stackoverflow.com/a/37877412/1206267). – Ohgodwhy