-
是否可以同时获取用户详细信息和距离以及用户详细信息
-
我想要$data变量中的所有用户详细信息以及$distance
-
两个变量都应该在响应中
public function getProfessionalByCityLatLon(Request $request) { $data = DB::table('profiles') ->leftJoin('cities','profiles.city','=','cities.id') ->leftJoin('users', 'profiles.user_id', '=', 'users.id') ->where('cities.name', '=', $request->select_city) ->get(); foreach($data as $data1){ $longitude1 = 23.6676092; // i will get it later from $request $latitude1 = 86.0490814; // Same with this also $longitude2 = $data1->longitude; $latitude2 = $data1->latitude; $unit = 'kilometers'; $theta = $longitude1 - $longitude2; $distance = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta))); $distance = acos($distance); $distance = rad2deg($distance); $distance = $distance * 60 * 1.1515; switch($unit) { case 'miles': break; case 'kilometers' : $distance = $distance * 1.609344; $distance = $distance * 1000; } $profDistance = (round($distance, 2)); } $response = [ 'success' => true, 'distance' => $profDistance, 'user' => $data, 'message' => 'City retrieved successfully.', ]; Log::info($response); return response()->json($response, 200); }
我找到了解决方案,实际上,首先,我想要数据库中的所有记录,其中城市名称和类别根据参数,然后我想计算每个记录来自数据库的距离。
public function getProfessionalByCity($id, $currentLat, $currentLon)
{
Log::info('ye city select karne k baad on load calling ');
// Log::info($id);
$cityname = ucfirst($id);
$newUser = DB::table('profiles')
->leftJoin('cities','profiles.city','=','cities.id')
->leftJoin('users', 'profiles.user_id', '=', 'users.id')
->where('cities.name', '=', $cityname)
->get();
// Log::info($newUser);
$longitude1 = $currentLat;
$latitude1 = $currentLon;
foreach($newUser as $user)
{
$professionalAvatar = $user->avatar;
$profileId = $user->id;
$ProfessionalAvailable = $user->availability;
$ProfessionalName = $user->full_name;
$professionalProfession = $user->profession;
$latitude2 = $user->latitude;
$longitude2 = $user->longitude;
$unit = 'kilometers';
$theta = $longitude1 - $longitude2;
$distance = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta)));
$distance = acos($distance);
$distance = rad2deg($distance);
$distance = $distance * 60 * 1.1515;
switch($unit) {
case 'miles':
break;
case 'kilometers' :
$distance = $distance * 1.609344;
// $distance = $distance * 1000;
}
$profId[] = $profileId ;
$calculatedDistance[] = (round($distance, 2));
$professName[] = $ProfessionalName;
$profession[] = $professionalProfession;
$availablity[] = $ProfessionalAvailable;
$avatar[] = $professionalAvatar;
// Log::info($calculatedDistance."ye h distance");
// return (round($distance,2));
}
for($count = 0; $count < count($calculatedDistance); $count++)
{
$data = array(
'Distance' => $calculatedDistance[$count],
'ProfessionalName' => $professName[$count],
'Profession' => $profession[$count],
'ID' => $profId[$count],
'Availablity' => $availablity[$count],
'Avatar' => $avatar[$count],
);
$calDistance[] =$data;
}
$response = [
'success' => true,
'data' => $calDistance,
'message' => 'City retrieved successfully.',
];
// Log::info($response);
return response()->json($response, 200);
}