【发布时间】:2023-03-20 06:55:01
【问题描述】:
我想使用基于 Laravel 标准的 SQL 代码。此代码在我的其他项目中运行良好。我想将它添加到我的控制器函数中,并以最简单的方式将此 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);
}
【问题讨论】:
-
向我们展示错误信息。
-
未定义变量:纬度
-
您在
val_getdistance()中定义的唯一变量是$radius-$lat和$lng未定义。您的意思是将它们作为参数传递吗?或者将它们设置在您设置$radius的位置? -
我想将它们设置为我的
$radius的设置位置。 -
简单,定义
$lat和$lng
标签: php sql laravel latitude-longitude radius