Laravel 4.2 Как преобразовать мой код SQL в стандарты Laravel

Я хотел бы использовать мой код SQL, основанный на стандартах Laravel. Этот код отлично работает в моем другом проекте. Я хочу добавить это к моей функции контроллера и преобразовать этот код SQL в стандарты Laravel, самым простым способом. Кто-нибудь знает, как это сделать?

Вот мои коды:

SELECT SQL_CALC_FOUND_ROWS a.*, ( $distance_exp * acos( cos( radians($lat) ) * cos( radians( latitude ) )
* cos( radians( lontitude ) - radians($long) )
+ sin( radians($lat) ) * sin( radians( latitude ) ) ) )
AS distance

FROM {{driver}} a
HAVING distance < $max_radius
$and
ORDER BY is_sponsored DESC, distance ASC
LIMIT 0,100

Итак, вот что я попробовал, но все равно он получает сообщение об ошибке:

public function val_getdistance()
{
//sample value
$radius=3;
$property =
Driver::select(
DB::raw("title, latitude, longitude, ( 3959 * acos( cos( radians(:latitude) ) *
cos( radians( latitude ) ) * cos( radians( longitude ) - radians(:longitude) ) +
sin(radians(:lat_i) ) * sin( radians( latitude ) ) ) ) AS distance"),
["latitude" => $lat, "longitude" => $lng, "lat_i" => $lat])
->having("distance", "<", "$radius")
->orderBy("distance")
->take(20)
->setBindings([$lat, $lng, $lat,  $radius])
->get();

dd($property);
}

-1

Решение

Вам необходимо отправить значения в функцию, чтобы она выглядела следующим образом, так как $lng а также $lat не определены нигде

public function val_getdistance($lng, $lat)
{
//sample value
$radius=3;
$property =
Driver::select(
DB::raw("title, latitude, longitude, ( 3959 * acos( cos( radians(:latitude) ) *
cos( radians( latitude ) ) * cos( radians( longitude ) - radians(:longitude) ) +
sin(radians(:lat_i) ) * sin( radians( latitude ) ) ) ) AS distance"),
["latitude" => $lat, "longitude" => $lng, "lat_i" => $lat])
->having("distance", "<", "$radius")
->orderBy("distance")
->take(20)
->setBindings([$lat, $lng, $lat,  $radius])
->get();

dd($property);
}

С помощью этого объявления вы будете отправлять lng и lat (предполагая, что они должны быть динамическими) в функцию самостоятельно, вы можете добавить любой другой параметр, который вам нужен в объявлении функции.
Если вам нужна статика, вы можете указать, где $radius есть, поэтому чуть ниже / выше радиуса добавьте вот так, а остальная часть вашего кода останется неизменной:

$lng = 42.2039;
$lat = 29.3901;

или любые другие значения, которые вам нужны.

Надеюсь это поможет.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector