如何使用Laravel API显示附近的地方

时间:2018-04-12 03:23:12

标签: php laravel

我正在使用Laravel 5.6创建REST API(我不得不说我是新的,因为我可能使用了错误的术语。我很抱歉,我改进了自己我需要听听我的错误:))

我有一个功能可以在我的控制器中找到附近的地方

     public function index(\Illuminate\Http\Request $request) {
    if($request->has('party_category')){
       $parties = Parties::where('party_category', $request->party_category)->get();//your new query here
    }
    else if($request->has('lat') && $request->has('long')){
        $parties = Parties::whereRaw("ACOS(SIN(RADIANS('latitude'))*SIN(RADIANS($request->lat))+COS(RADIANS('latitude'))*COS(RADIANS($request->lat))*COS(RADIANS('longitude')-RADIANS($request->long)))*6380 < 10");
    }else {
        $parties = Parties::all();
    }
    return Fractal::includes('places')->collection($parties,new PartyTransformer);
 }

我正在使用这个网址发送当前位置,但是当我给他们时,laravel向我展示了附近没有的各方。我想要显示附近的地方

  

http://127.0.0.1:8000/api/parties?lat=37.043237&long=27.392445

但是当我将参数发送到url时显示

{"data":[]}

我无法显示附近的任何地方

同样在我的数据库中我保持lat和long这样:

   public function up()
{
    Schema::create('parties', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('places_id')->unsigned();
        $table->string('slug');
        $table->string('party_title');
        $table->string('party_category');
        $table->string('rating')->nullable();
        $table->date('party_date');
        $table->string("latitude")->nullable();
        $table->string("longitude")->nullable();
        $table->integer('fav_count')->nullable();
        $table->longText('image_path');
        $table->longText('party_desp');
        $table->timestamps();
    });
}

如何展示附近的?

2 个答案:

答案 0 :(得分:0)

$parties = Parties::whereRaw("ACOS(SIN(RADIANS('latitude'))*SIN(RADIANS($request->lat))+COS(RADIANS('latitude'))*COS(RADIANS($request->lat))*COS(RADIANS('longitude')-RADIANS($request->long)))*6380 < 10"); 你错过了 - &gt; get()。你需要添加get()才能返回一个你可以使用的集合

 //this returns a collection now since we added get()  
 $parties = Parties::whereRaw("ACOS(SIN(RADIANS('latitude'))*SIN(RADIANS($request->lat))+COS(RADIANS('latitude'))*COS(RADIANS($request->lat))*COS(RADIANS('longitude')-RADIANS($request->long)))*6380 < 10")->get();

答案 1 :(得分:0)

我修好了,希望能帮助某人

class PartiesController extends Controller
{
        public function index(\Illuminate\Http\Request $request) {
          if($request->has('lat') && $request->has('long')){
                $lat = $request->lat;
                $long = $request->long; 
            $parties=DB::select(DB::raw("SELECT *,111.045*DEGREES(ACOS(COS(RADIANS(':lat'))*COS(RADIANS(`latitude`))*COS(RADIANS(`longitude`) - RADIANS(':long'))+SIN(RADIANS(':lat'))*SIN(RADIANS(`latitude`)))) AS distance_in_km FROM parties ORDER BY distance_in_km asc LIMIT 0,5"), array(
                'lat' => $lat,
                'long' => $long
              ));
            $hidacik = Parties::hydrate($parties);
            return Fractal::includes('places')->collection($hidacik,new PartyTransformer);
             }
           else {
                $parties = Parties::all();
            }
       return Fractal::includes('places')->collection($parties,new PartyTransformer);
        }
}