代码之家  ›  专栏  ›  技术社区  ›  Ashish

Laravel:基于lat long从数据库中获取结果

  •  1
  • Ashish  · 技术社区  · 6 年前

    我是新来的拉瓦维尔和使用拉瓦维尔5.6和我正在工作的API。在API结果中,我想要所有卖方谁是50英里半径内的买方与分页。 以下是我迄今为止所做的尝试:

    $lat = Auth::user()->latitude;
    $long = Auth::user()->longitude;
    $products = DB::table('products')
                    ->select(DB::raw('title, ( 
                            6371 * acos( cos( radians({$lat}) 
                        ) * cos( 
                            radians( `latitude` ) 
                        ) * cos( 
                            radians( `longitude` ) - radians({$long}) 
                        ) + sin( 
                            radians({$lat}) 
                        ) * sin( radians( `latitude` ) ) 
                    ) 
                ) AS distance'))
                ->where('distance', '<', 50)
                ->paginate(20);
    
    var_dump($products);
    

    但我找不到解决办法。 请帮忙。提前谢谢。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Ashish    6 年前

    我找到了答案,这是问题所在

    $lat = Auth::user()->latitude;
            $long = Auth::user()->longitude;
            $products = Products::selectRaw('id, title, (
        3959 * acos (
          cos ( radians(30.7062683) )
          * cos( radians( latitude ) )
          * cos( radians( longitude ) - radians(76.7165878) )
          + sin ( radians(30.7062683) )
          * sin( radians( latitude ) )
        )
      ) AS distance')->orderBy('distance')->having('distance', '<', 100)->paginate(50);
            var_dump($products);
    

    然后安装并遵循此软件包。会有帮助的 https://github.com/justbetter/laravel-pagination-with-havings 我希望它将来能帮助别人。快乐编码!!!