首页 > 解决方案 > 难以从 PHP 服务器端返回正确的格式到 Vue 前端

问题描述

我的目标是对具有纬度和经度记录的数据库进行 GET axios/ajax 调用,然后将每条记录的 2 个纬度和经度组合成一个 JSON 对象,其格式为{lat: 20, lng: 20}. 目前我有这个:

public function getLocations(Request $request){
    $locations = Location::where('user_id', 1)->get()->toJson();

    return response()->json([
        'locations' => $locations,
        'message' => 'Successfully added locations!'
    ], 201);
}

我需要以某种方式传递一个 json 对象数组。我相信它应该是这样的:

$locations = [   {lat: 10, lng: 10},
    {lat: 11, lng: 11},
    {lat: 12, lng: 12}
]

$locations 中的每条记录都有一个 JSON 对象。lat 和 lng 位于 $locations。例如 $locations->lat 和 $locations->lng。我将如何创建这样一个可以在前端使用的对象?

[{"id":40,"user_id":1,"lat":42,"lng":24,"created_at":"2019-01-16 10:14:40","updated_at":"2019-01-16 10:14:40"},
{"id":41,"user_id":1,"lat":43,"lng":25,"created_at":"2019-01-16 10:14:41","updated_at":"2019-01-16 10:14:41"}]

标签: phpjsonlaravel

解决方案


你可以这样做:

public function getLocations(Request $request){
    $locations = Location::where('user_id', 1)->get();

    $locationsData= [];
    foreach ($locations  as $location) {
        $locationsData[] = ['lat' => $location->lat, 'lng' => $location->lng];
    }
    return response()->json([
        'locations' => $locationsData,
        'message' => 'Successfully added locations!'
    ], 201);
}

推荐阅读