select(['id as ip_pool_id', 'service_id']); $viaVm = DB::table('ip_pools as ip') ->join('module_ip_address as mia', function ($join) { $join->on('mia.ip', '=', 'ip.ip_address') ->on('mia.module_network_id', '=', 'ip.module_network_id'); }) ->join('module_vmware as mv', 'mv.module_ip_address', '=', 'mia.id') ->whereNotNull('mv.service_id') ->select(['ip.id as ip_pool_id', 'mv.service_id']); $used = $direct->toBase()->union($viaVm)->get()->unique(fn ($row) => "{$row->service_id}-{$row->ip_pool_id}")->values(); return response()->json(['error' => false, 'data' => $used]); } public function dashboard(IpPoolDashboard $dashboard): JsonResponse { return response()->json(['error' => false, 'data' => $dashboard->build()]); } public function networks(): JsonResponse { $networks = ModuleNetwork::select(['id', 'name', 'type', 'network', 'module_host_id']) ->with(['host:id,name,module_datacenter_id', 'host.datacenter:id,name']) ->orderBy('name') ->get(); return response()->json(['error' => false, 'data' => $networks]); } }