mll-lab/laravel-utils

Shared Laravel utilities of MLL

v5.0.0 2024-04-24 09:53 UTC

README

Continuous Integration Code Coverage

Latest Stable Version Total Downloads

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() {
    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;
    }
};

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.