mll-lab/laravel-utils
laravel-utils
Shared Laravel utilities of MLL
Installation
Install through composer
composer require mll-lab/laravel-utils
Usage
See tests.
Autoincrement
Allows the creation of incrementing IDs without actually using autoincrement.
Extend the class Autoincrement with a descriptive name for your ID.
use MLL\LaravelUtils\Database\Autoincrement;
final class MaxFooID extends Autoincrement
{
public static function name(): string
{
return 'max_foo_id';
}
}
Generate a migration and call the createTable() method in it:
public function up(): void
{
MaxFooID::createTable();
}
To use this ID in your model, set $incrementing to false and assign the ID to your model in the booted() method:
public $incrementing = false;
protected static function booted(): void
{
self::creating(function (self $instance): void {
$instance->id ??= MaxFooID::next();
});
Conditional Migrations
To run a migration conditionally, implement the MLL\LaravelUtils\Database\ConditionalMigration
interface and its ->shouldRun() method in your migration:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Carbon;
use MLL\LaravelUtils\Database\ConditionalMigration
return new class extends Migration implements ConditionalMigration {
public function up(): void
{
// Something that would put intense strain on the database
}
public function shouldRun(): bool
{
$currentHour = Carbon::now()->hour;
// Only run between 01:00 and 03:00
return $currentHour > 1 && $currentHour < 3;
}
};
Migrate Check
The migrate:check command compares migration files against the migrations table and reports
any truly pending migrations. Unlike other implementations, it is aware of ConditionalMigration:
migrations where shouldRun() returns false are not reported as pending.
php artisan migrate:check
Use --path to check a specific migration directory:
php artisan migrate:check --path=vendor/mll-lab/laravel-utils/migrations
Returns exit code 0 when no migrations are pending, exit code 1 otherwise.
Strict Stubs
To continually keep your stubs updated with the latest and greatest from this package,
add /stubs to your .gitignore and add the following to your composer.json:
"scripts": {
"post-update-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postUpdate",
+ "@php artisan vendor:publish --tag=strict-stubs --force"
]
}
Changelog
See CHANGELOG.md.
Contributing
See CONTRIBUTING.md.
License
This package is licensed using the MIT License.
Related Packages
Powerful PHP database abstraction layer (DBAL) with many features for database s...
Laravel Serializable Closure provides an easy and secure way to serialize closur...
Cli error handling for console/command-line PHP applications.