SeederRegistry
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);
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():
$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.