API Reference

SeederRegistry

The registry that collects the seeders of every layer, and the seeder that runs them.

Lomkit\Osdd\Seeders\SeederRegistry collects the seeder classes registered by the layers. The package binds it as a singleton, and LayersSeeder reads it.

use Lomkit\Osdd\Seeders\SeederRegistry;

$registry = app(SeederRegistry::class);
Layers register seeders through loadSeeders(). Use the registry directly only in your own tooling.

push()

public function push(int $priority, string ...$seeders): void

Adds one or more seeder classes at a priority. Lower priorities run first.

$registry->push(0, OrdersSeeder::class, OrderStatusesSeeder::class);
$registry->push(-10, RolesSeeder::class);

A class pushed twice is kept once, with its first priority.

seeders()

public function seeders(): array

Returns the seeder classes sorted by ascending priority. Classes with the same priority keep their registration order.

foreach (app(SeederRegistry::class)->seeders() as $seeder) {
    echo $seeder.PHP_EOL;
}

// Functional\Users\Database\Seeders\RolesSeeder          (priority -10)
// Functional\Orders\Database\Seeders\OrdersSeeder        (priority 0)
// Functional\Orders\Database\Seeders\OrderStatusesSeeder (priority 0)

In Tinker:

> app(\Lomkit\Osdd\Seeders\SeederRegistry::class)->seeders()

An empty list means no layer provider called loadSeeders().

LayersSeeder

Lomkit\Osdd\Seeders\LayersSeeder is a Laravel seeder that runs every seeder of the registry, in priority order. osdd:seed runs it, and so can Laravel's own commands and test traits:

php artisan db:seed --class="Lomkit\Osdd\Seeders\LayersSeeder"
php artisan migrate --seed --seeder="Lomkit\Osdd\Seeders\LayersSeeder"
php artisan migrate:fresh --seed --seeder="Lomkit\Osdd\Seeders\LayersSeeder"
use Illuminate\Foundation\Testing\RefreshDatabase;
use Lomkit\Osdd\Seeders\LayersSeeder;

class PlaceOrderTest extends TestCase
{
    use RefreshDatabase;

    protected bool $seed = true;

    protected string $seeder = LayersSeeder::class;
}
  • It warns when no seeder is registered.
  • Before running anything, it checks that every registered class exists. A missing class throws Lomkit\Osdd\Seeders\SeederNotFoundException, and no seeder runs.
  • A seeder that throws stops the run.

Pass the full class name to --seeder: Laravel prefixes a name without a backslash with Database\Seeders\.

As the default seeder

osdd:start binds LayersSeeder as the default seeder in Technical\Osdd\Providers\OsddServiceProvider::register():

technical/osdd/src/Providers/OsddServiceProvider.php
$this->app->bind('DatabaseSeeder', \Lomkit\Osdd\Seeders\LayersSeeder::class);

php artisan db:seed, migrate --seed, migrate:fresh --seed and RefreshDatabase with only $seed = true then run the layer seeders. A real Database\Seeders\DatabaseSeeder class takes precedence over the binding.