Creating a Global Search in Laravel is a powerful and practical feature, and you've demonstrated a concise and effective implementation. Here's a brief breakdown of the changes you made:
Route Modification:
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::middleware('auth:sanctum')->get('/search', function (Request $request) {
    abort_if(
        empty($request->search),
        404,
        'Please provide search keyword'
    );
    return search($request);
});
In this route modification, you've added a /search endpoint that expects a search keyword. If the keyword is missing, it returns a 404 response with a relevant message. Otherwise, it calls the search() helper function.
Helper Function:
use App\Enums\SearchType;
use Illuminate\Http\Request;
use Laravel\Scout\Searchable;
if (! function_exists('search')) {
    function search(Request $request = null)
    {
        // ... (unchanged code)
        foreach ($types as $type) {
            // ... (unchanged code)
            $class = $type->value;
            $query = $class::search($keyword);
            $data[$type->label] = $paginate
                ? $query->paginate()
                : $query->first();
        }
        return [
            'data' => $data,
            'meta' => [
                'searched_at' => date('Y-m-d H:i:s')
            ],
        ];
    }
}
In the helper function, you've enhanced the global search functionality. It takes a request object as an optional parameter, allowing flexibility. The function performs searches based on different types (user, profile) and supports pagination if requested.
Enum Update:
namespace App\Enums;
use Spatie\Enum\Laravel\Enum;
/**
 * @method static self user()
 * @method static self profile()
 */
class SearchType extends Enum
{
    public static function values(): array
    {
        return [
            'user' => \App\Models\User::class,
            'profile' => \Profile\Models\Profile::class,
        ];
    }
}
In the enum update, you've simplified the enum values, mapping search types directly to their respective model classes.
Your approach is elegant and provides a scalable solution for implementing a Global Search feature in Laravel. Well done!
 
                             
                 
                     
                            