Commands Overview
osdd:seed
Run all seeders registered across all layers.
osdd:seed runs every seeder that has been registered in any layer's service provider via loadSeeders().
Usage
Terminal
php artisan osdd:seed
Options
| Option | Description |
|---|---|
--fresh | Runs migrate:fresh before seeding (drops all tables and re-runs all migrations) |
--refresh | Runs migrate:refresh before seeding (rolls back and re-runs all migrations) |
If both --fresh and --refresh are supplied, --fresh takes precedence. If the migration step fails, seeding is aborted.
Terminal
# Drop all tables, re-run migrations, then seed
php artisan osdd:seed --fresh
# Roll back and re-run migrations, then seed
php artisan osdd:seed --refresh
How It Works
OSDD maintains a SeederRegistry singleton in the IoC container. When a layer's service provider calls loadSeeders(), the seeder class-strings are pushed into the registry.
When osdd:seed runs, it:
- Optionally runs
migrate:freshormigrate:refresh(if the corresponding flag is passed) - Resolves the
SeederRegistryfrom the container - Iterates over all registered seeder class-strings in priority order
- Calls
php artisan db:seed --class={SeederClass}for each one
Registering Seeders
Seeders must be registered in a layer's service provider:
src/Providers/OrdersServiceProvider.php
<?php
namespace Functional\Orders\Providers;
use Xefi\LaravelOSDD\LayerServiceProvider;
use Functional\Orders\Database\Seeders\OrdersSeeder;
use Functional\Orders\Database\Seeders\OrderStatusSeeder;
class OrdersServiceProvider extends LayerServiceProvider
{
public function boot(): void
{
$this->loadSeeders([
OrdersSeeder::class,
OrderStatusSeeder::class,
]);
}
}
Seeder Execution Order
By default all seeders have priority 0 and run in registration order. Pass a numeric $priority as the second argument to loadSeeders() to control the order — lower numbers run first.
// Runs first — foundational data
$this->loadSeeders([RolesSeeder::class], priority: -10);
// Runs second — default priority
$this->loadSeeders([OrdersSeeder::class]);
// Runs last — depends on orders existing
$this->loadSeeders([InvoicesSeeder::class], priority: 10);
Seeders with the same priority maintain their registration order (stable sort).
Example Seeder
database/seeders/OrdersSeeder.php
<?php
namespace Functional\Orders\Database\Seeders;
use Illuminate\Database\Seeder;
use Functional\Orders\Models\Order;
class OrdersSeeder extends Seeder
{
public function run(): void
{
Order::factory()->count(50)->create();
}
}
osdd:seed is the OSDD equivalent of a central DatabaseSeeder that calls all domain seeders. The key difference is that each layer is responsible for registering its own seeders — there is no single file to edit when adding a new domain.