spatie/laravel-superseeder
A Laravel package from Spatie for “super seeding”: convenient helpers and structure to build and run powerful database seeders, generate realistic test data, and quickly spin up complete demo environments with sensible defaults and relationships.
Strengths:
Weaknesses:
SoftDeletes may need custom logic or pre-processing.Key Use Cases:
spatie/faker, symfony/yaml) are widely adopted and stable.updateOrCreate).afterSeed, beforeSeed) are available but may require deep package customization for advanced use cases (e.g., conditional seeding based on environment variables).config/seeds/dev.yaml, config/seeds/prod.yaml)?php artisan db:seed --class=SuperSeeder)? Are there race conditions with parallel jobs?db:seed --force suffice, or is a custom rollback needed?DatabaseSeeder, laravel-shift/database-seeder, or raw SQL scripts) considered? If so, why was SuperSeeder chosen?migrate:fresh --seed for zero-state testing.fresh() are Laravel-specific.spatie/laravel-permission for role-based seeding.DatabaseSeeder, model-specific seeders) for migration candidates.users_table_seeder) to test SuperSeeder’s syntax and performance.php artisan db:seed --class=SuperSeeder --dry-run.// app/Console/Kernel.php
protected function seed()
{
if (app()->environment('testing')) {
$this->call(SuperSeeder::class);
} else {
$this->call(UsersTableSeeder::class);
}
}
call() methods.// database/seeders/DatabaseSeeder.php
public function run()
{
$this->call([
SuperSeeder::class, // Handles complex data
PermissionsSeeder::class, // Legacy seeder for simple data
]);
}
replace or conflict directives if needed.seeders array supports custom callbacks for non-Eloquent operations:
# config/superseeder.php
seeders:
- model: App\Models\User
data: users.yaml
- callback: App\Seeders\CustomSeeder
depends_on in YAML to enforce dependencies:
# config/seeds/users.yaml
depends_on: [categories, tags] # Ensures categories/tags exist before users
// app/Console/Seeders/SuperSeeder.php
public function run()
{
$this->call([
CategoriesTableSeeder::class, // Legacy seeder
SuperSeeder::class, // Handles users, posts, etc.
]);
}
parallel method or queue workers:
// database/seeders/DatabaseSeeder.php
public function run()
{
\App\Models\User::factory()->count(100)->create(); // Parallel via factory
$this->call(SuperSeeder::class);
}
# config/seeds/production.yaml
# Only seed in production if flag is set
seeders:
- model: App\Models\Product
data: products.yaml
when: env('SEED_PRODUCTION', false) == true
users/base.yaml, users/admin.yaml).laravel-shift/database-seeder to auto-generate seeds from production data.How can I help you explore Laravel packages today?