Как мне выполнить эту хранимую процедуру и подзапрос SQL в Laravel Eloquent? - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь выполнить этот оператор SQL ниже, но нахожу синтаксис Laravel Eloquent довольно запутанным для более сложных запросов с хранимыми процедурами и подзапросами.

Как мне выполнить нижеприведенное?

$longitude  = (float) $longLat['longitude'];
$latitude   = (float) $longLat['latitude'];
$radius     = $distance; // in miles

$lng_min = $longitude - $radius / abs(cos(deg2rad($latitude)) * 69);
$lng_max = $longitude + $radius / abs(cos(deg2rad($latitude)) * 69);
$lat_min = $latitude - ($radius / 69);
$lat_max = $latitude + ($radius / 69);

SELECT get_distance_in_miles_between_geo_locations(51.666774,-1.92973, lat, lng) AS distance_from_input, domain FROM websites_lats_and_longs WHERE domain IN (SELECT domain FROM websites_lats_and_longs
WHERE (lng BETWEEN $lng_min AND $lng_max)
AND (lat BETWEEN $lat_min and $lat_max)) ORDER BY distance_from_input;

1 Ответ

0 голосов
/ 23 октября 2018

Во-первых, давайте напишем ГДЕ В подзапрос

$range = DB::table("websites_lats_and_longs")
           ->select("domain")
           ->whereBetween("lng", [$lng_min, $lng_max])
           ->whereBetween("lat", [$lat_min, $lat_max])
           ->get(); 

Далее напишите запрос, который использует хранимую функцию

$result = DB::table("websites_lats_and_longs")
            ->selectRaw(
              "get_distance_in_miles_between_geo_locations(?, ?, lat, lng)"
            , [51.666774, -1.92973])
            ->whereIn(["domain" => $range])
            ->orderBy("distance_from_input")
            ->get();

Где DB::table("websites_lats_and_longs")заменяется моделью Eloquent для таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...