首页 > 解决方案 > 如何过滤数组以获取laravel中两个不同对象中的特定列

问题描述

我需要这样的回应。

"result": [ 
{  
  "properties": { 
    "device_id": 15196,
    "device_name": Street Light 1,
    "state" : 1,
    "status": 1,
  }, 
  "geometry":{ 
    "lat":33.7017, 
    "lng": 73.0228 
  } 
},
{  
  "properties": { 
    "device_id": 15196,
    "device_name": Street Light 1,
    "state" : 1,
    "status": 1,
  }, 
  "geometry":{ 
    "lat":33.7017, 
    "lng": 73.0228 
  } 
},
]

我的代码在下面。我只想从我的整个回复中分出两个字段'lat','lng'。我的 sql 查询是正确的,但我想创建上面提到的自定义响应

$get1 = DB::table('device_user')
            ->join('devices', 'devices.id', '=', 'device_user.device_id')
            ->join('components', 'devices.id', '=', 'components.device_id')
            ->select('devices.id as device_id', 'devices.name', 'devices.status', 'components.state', 'components.type', 'devices.lat', 'devices.lng')
            ->where('device_user.user_id', $request->user_id)
            ->where('components.type', $type)
            ->get();
$array = [];
foreach ($get1 as $key => $value) {
array_push($array, ["properties" => $value, "geometry" => $value->lat]);
            }
return $array;

标签: arrayslaraveleloquentlaravel-8query-builder

解决方案


试试这个

$get1 = DB::table('device_user')
            ->join('devices', 'devices.id', '=', 'device_user.device_id')
            ->join('components', 'devices.id', '=', 'components.device_id')
            ->select('devices.id as device_id', 'devices.name', 'devices.status', 'components.state', 'components.type', 'devices.lat', 'devices.lng')
            ->where('device_user.user_id', $request->user_id)
            ->where('components.type', $type)
            ->get();

$main_array = [];
foreach ($get1 as $key => $value) {

    $main_array[$key]['properties'] = array('device_id' => $value->device_id, 'device_name' =>  $value->device_name, 'state' => $value->state, 'status' => $value->status);
    $main_array[$key]['geometry'] = array('lat' => $value->lat, 'lng' =>  $value->lng);

}
return $main_array;

推荐阅读