with(['fboVehicles' => function($query) { $query->where([['status','!=', 4]]); // 对关联表 posts 加条件 }]) ->whereIn('type',['port','warehouse']) ->get() ->map(function ($location) { $location->vehicle_count = $location->vehicles->count(); $location->fbo_vehicle_count = $location->fboVehicles->count(); $location->count = ($location->vehicle_count > 0) ? $location->vehicle_count : $location->fbo_vehicle_count; return $location; }); foreach ($locations as &$location) { unset($location->vehicles); unset($location->fboVehicles); } return Util::success($locations); } /** * Get all locations that have vehicles */ public function production(Request $request) { $where = []; $status = $request->post('status', ''); if($status == 1){ $status = [5,6]; }elseif ($status == 2){ $status = [4]; }elseif ($status == 3){ $status = [1,2,3,7,8]; $where[] = ['vin' ,'<>', null]; }elseif ($status == 4){ $status = [1,2,3,7,8]; $where[] = ['vin' ,'=', null]; } $vehicles = Vehicle::select('locations_id')->where($where)->whereNotNull('locations_id'); if(!empty($status)){ $vehicles = $vehicles->whereIn('status',$status); } $locations_id = $vehicles->groupBy('locations_id')->get(); $locations_id = $locations_id->pluck('locations_id')->toArray(); $locations = Location:: // with('vehicles') // ->with('fboVehicles') where(['type' => 'production']) ->whereIn('id',$locations_id) ->get(); // ->map(function ($location) { // $location->vehicle_count = $location->vehicles->count(); // $location->fbo_vehicle_count = $location->fboVehicles->count(); // $location->count = ($location->vehicle_count > 0) ? $location->vehicle_count : $location->fbo_vehicle_count; // return $location; // }); foreach ($locations as &$location) { $location->vehicle_count = Vehicle::where(['locations_id'=>$location->id])->count(); $location->fbo_vehicle_count = Vehicle::where(['fbo_locations_id'=>$location->id])->count(); $location->count = ($location->vehicle_count > 0) ? $location->vehicle_count : $location->fbo_vehicle_count; $location->status = $request->post('status', ''); unset($location->vehicles); unset($location->fboVehicles); } return Util::success($locations); } /** * Get a specific location with its vehicles */ public function show(Request $request, $id) { $location = Location::hasVehicles() ->with('vehicles') ->find($id); if (!$location) { return Util::fail(null, 'Location not found or has no vehicles'); } return Util::success($location); } }