Я использую Laravel 5.2 и имею SQL-запрос с использованием функций builder-запроса и нарушил запрос при переходе из базы данных MySQL в PostgreSQL. Запрос предназначен для получения всех местоположений в пределах определенного количества миль в широте и долготе.SQL-синтаксис в PHP Laravel Query Builder PostgreSQLvs MySQL
$locations = Location::select(
DB::raw("*,
(3959 * acos(cos(radians(?)) *
cos(radians(lat))
* cos(radians(long) - radians(?)
) + sin(radians(?)) *
sin(radians(lat)))
) AS distance"))
->having("distance", "<", $distance)
->orderBy("distance")
->setBindings([$latitude, $longitude, $latitude])
->get();
После переключения на источник данных PostgreSQL, я получаю эту ошибку:
QLSTATE[42703]: Undefined column: 7 ERROR: column "distance" does not exist
LINE 7:) AS distance from "locations" having "distance" < $4 o...
^ (SQL: select *,
(3959 * acos(cos(radians(37.7959362)) *
cos(radians(lat))
* cos(radians(long) - radians(-122.4000032)
) + sin(radians(37.7959362)) *
sin(radians(lat)))
) AS distance from "locations" having "distance" < 15 order by "distance" asc)
Что бы быть лучшим способом решить эту проблему. Я знаю, что это разница в синтаксисе SQL между MySQL и Postgres, созданным Laravel, но я разрываю волосы, пытаясь понять, как исправить эту ошибку.
Любая помощь была бы принята с благодарностью!
Спасибо @patricus! Я смог получить решение, используя ваше предложение использовать производную таблицу. Мне пришлось добавить предложение group by, которое выглядело так: -> groupBy (DB :: raw ('id, title, address_1 ...')). –