gpt4 book ai didi

php - 拉维尔 4 : How do I translate this complex raw geographic SQL query into using Eloquent?

转载 作者:行者123 更新时间:2023-11-29 01:40:13 25 4
gpt4 key购买 nike

所以我试图在一定距离内找到与另一个特定点最近的点,为此我使用了半正弦公式。原始查询本身是:

SELECT id, 
( 3959 * acos( cos( radians(input_lat) ) * cos( radians( map_loc_lat ) ) * cos( radians( map_loc_long ) - radians(input_long) ) + sin( radians(input_lat) ) * sin( radians( map_loc_lat ) ) ) )
AS distance FROM posts HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

input_latinput_long 是我希望中心搜索点开始的预定义坐标,map_loc_latmap_loc_long posts 的点数。

我正在尝试使用 Eloquent 的 selectRaw() 方法来完成一部分繁重的工作,如下所示:

$query->selectRaw('id,  ( 6371 * acos( cos( radians(?) ) * cos( radians( map_loc_lat ) )
* cos( radians( ? ) - radians(?) ) + sin( radians(?) )
* sin( radians( map_loc_lat ) ) ) ) AS distance', )

但是我很困惑我应该如何使用 Eloquent 指定问号来指示我输入的纬度和经度,以及我将如何继续链接我的 order by 子句和我的限制?

最佳答案

在我的一个项目中使用了相同的 sql。没有找到任何其他解决方案而不是使用 DB::raw()select()

例子如下:

 $distance = Input::get('distance', 0.1);
$lat = Input::get('latitude');
$lng = Input::get('longitude');
$select="drops.*,(6371 * acos( cos( radians({$lat}) ) * cos( radians( drops.latitude ) ) * cos( radians( drops.longitude ) - radians({$lng}) ) + sin( radians({$lat}) ) * sin( radians(drops.latitude) ) )) AS distance";
$drops_query = DB::table('drops')->select(DB::raw($select))
->addSelect('users.login as username')
->leftJoin('users', 'users.id', '=', 'drops.user_in')
->where('drops.latitude','<>','')
->where('drops.longitude','<>','');
$drops_query = $drops_query->having('distance', '<=', $distance)->orderBy('distance','DESC');
$drops = $drops_query->take($limit)->get();

这种方法让我可以为这个复杂的查询附加一些额外的过滤、分页等。

关于php - 拉维尔 4 : How do I translate this complex raw geographic SQL query into using Eloquent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26527597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com