query('q', '')); $results = mb_strlen($q) >= 2 ? $this->resultsForUser($request->user(), $q) : []; if ($request->expectsJson() || $request->ajax() || $request->wantsJson()) { return response()->json(['results' => $results]); } return view('search', [ 'query' => $q, 'results' => $results, ]); } /** @return list */ private function resultsForUser($user, string $q): array { $like = '%'.$q.'%'; $results = []; $serverTypes = [HostingProduct::TYPE_VPS, HostingProduct::TYPE_DEDICATED]; CustomerHostingOrder::query() ->forUser($user->id) ->whereHas('product', fn ($query) => $query->whereIn('type', $serverTypes)) ->where(function ($query) use ($like) { $query->where('domain_name', 'like', $like) ->orWhere('server_ip', 'like', $like); }) ->with('product') ->orderByDesc('updated_at') ->limit(12) ->get() ->each(function (CustomerHostingOrder $order) use (&$results): void { $panelUrl = $order->control_panel_url ?: route('servers.orders.show', $order); $results[] = [ 'type' => 'server', 'title' => $order->domain_name ?: ($order->product?->name ?? 'Server #'.$order->id), 'subtitle' => ($order->product?->name ?? 'Server').' ยท '.ucwords(str_replace('_', ' ', (string) $order->status)), 'url' => $panelUrl, ]; }); return $results; } }