Helper Functions
Global helper functions autoloaded via Composer. Available throughout your application.
Date & Time
diffForHumans
diffForHumans(?string $date): ?stringdiffForHumans('2025-01-15'); // "2 months ago"
diffForHumans(null); // nullymdDate
ymdDate(?string $date, string $format = 'Y-m-d'): ?stringymdDate('2025-01-15 14:30:00'); // "2025-01-15"
ymdDate('2025-01-15', 'd/m/Y'); // "15/01/2025"
ymdDate(null); // nulldateForReports
dateForReports(?string $date, string $format = 'Y-m-d H:i'): ?stringReturns null on invalid date (doesn't throw).
dateForReports('2025-01-15 14:30:00'); // "2025-01-15 14:30"
dateForReports('invalid'); // nulltoFormattedDateString
toFormattedDateString(?string $date): ?stringtoFormattedDateString('2025-01-15'); // "January 15, 2025"toDateString
toDateString(?string $date): ?stringtoDateString('2025-01-15 14:30:00'); // "2025-01-15"toDateTimeString
toDateTimeString(?string $date): ?stringtoDateTimeString('2025-01-15 14:30'); // "2025-01-15 14:30:00"toTimeString
toTimeString(?string $date): ?stringtoTimeString('2025-01-15 14:30:00'); // "14:30:00"Duration
parseTimeToSeconds
parseTimeToSeconds(string $timeString): int|floatSupports H:i:s, i:s, and plain integer seconds.
parseTimeToSeconds('01:30:00'); // 5400
parseTimeToSeconds('30:45'); // 1845
parseTimeToSeconds('120'); // 120formatDuration
formatDuration(int|float|null $duration, ?string $format = '%y %mo %d %h %m %s', string $separator = ' '): stringPlaceholders: %y years, %mo months, %d days, %h hours, %m minutes, %s seconds.
formatDuration(3661); // "1h 1m 1s"
formatDuration(90061); // "1d 1h 1m 1s"
formatDuration(3661, '%h %m'); // "1h 1m"
formatDuration(3661, '%h %m', '-'); // "1h-1m"
formatDuration(null); // "0s"
formatDuration(0); // "0s"
formatDuration(-3661); // "1h 1m 1s" (absolute)Filtering & Sorting
filterValue
filterValue(string $key = 'date'): ?stringReads from ?filters={"key":"value"} query parameter.
// URL: ?filters={"date":"2025-01-15","status":"1"}
filterValue('date'); // "2025-01-15"
filterValue('status'); // "1"
filterValue('missing'); // nullarrayFilters
arrayFilters(array|string|null $data): array<string, mixed>Converts JSON string or array to filtered array (removes falsy values).
arrayFilters('{"active":1,"name":""}'); // ['active' => 1]
arrayFilters(['a' => 1, 'b' => null]); // ['a' => 1]
arrayFilters(null); // []flattenArray
flattenArray(array $data, int $depth = 0): array<int|string, mixed>flattenArray(['a' => [1, 2], 'b' => [3]]); // [1, 2, 3]
flattenArray(['a' => [1, [2]]], 1); // [1, [2]]sortDirection
sortDirection(): stringReturns sort direction from ?descending query parameter.
// ?descending=true → "ASC"
// ?descending=false → "DESC"sortBy
sortBy(): array<string>|string|nullReturns sort key(s) from ?sort request parameter.
// ?sort=name → "name"
// ?sort[]=name&sort[]=id → ["name", "id"]
// (not set) → nullUtility
uuid
uuid(): UuidInterfaceGenerate UUID v4 via Str::uuid().
slug
slug(?string $text = null): ?stringslug('Hello World'); // "hello-world"
slug(null); // nullrelativePath
relativePath(string $path): stringReturns path relative to base_path().
relativePath('/var/www/app/Models/Post.php'); // "app/Models/Post.php"classShortName
classShortName(string $param): ?stringUses reflection. May throw ReflectionException.
classShortName(App\Models\Post::class); // "Post"Introspection
scopeMethods
scopeMethods(object $class): array<string>Returns all public methods starting with "scope".
scopeMethods(new Post); // ["scopeActive", "scopePublished", ...]tableColumns
tableColumns(string|Model $table = 'users'): array<string>Returns ordered column list: [id, ...sorted middle..., created_at, updated_at, deleted_at].
tableColumns('posts'); // ["id", "active", "desc", ...]
tableColumns(Post::class); // Same — accepts class-string
tableColumns(new Post); // Same — accepts model instancefillableCsv
fillableCsv(string $model): stringfillableCsv(Post::class); // "name,desc,status,active"
fillableCsv('posts'); // All columns from table (if not a model class)columnsCsv
columnsCsv(string $model, string $separator = ','): stringcolumnsCsv(Post::class); // "id,active,desc,name,..."
columnsCsv(Post::class, '|'); // "id|active|desc|name|..."Class Discovery
appClasses
appClasses(string $path = 'App', array $excluding = []): array<int, string>Recursively finds PHP classes in app directory.
appClasses('Models'); // ["App\Models\Post", ...]
appClasses('Models', [App\Models\User::class]); // Excludes UserdatabaseClasses
databaseClasses(?string $directory = null, array $excluding = []): array<int, string>Recursively finds PHP classes in database directory.
databaseClasses('seeders'); // ["Database\Seeders\PostSeeder", ...]
databaseClasses(); // All classes in database/