Files
Woles-Framework/app/Core/Commands/SeedCommand.php

92 lines
2.0 KiB
PHP
Raw Normal View History

<?php
namespace App\Core\Commands;
use App\Core\Database\Seeder;
/**
* NovaCore Seed Command
* CLI command to run database seeders
*/
class SeedCommand
{
private string $seedersPath;
public function __construct()
{
$this->seedersPath = __DIR__ . '/../../database/seeders';
}
/**
* Execute the command
*/
public function execute(string $seeder = null): void
{
if ($seeder) {
$this->runSeeder($seeder);
} else {
$this->runAllSeeders();
}
}
/**
* Run all seeders
*/
private function runAllSeeders(): void
{
echo "Running database seeders...\n";
$seederFiles = glob($this->seedersPath . '/*.php');
foreach ($seederFiles as $file) {
$filename = basename($file);
$className = $this->getSeederClassName($filename);
require_once $file;
if (class_exists($className)) {
$seeder = new $className();
$seeder->run();
}
}
echo "Seeding completed successfully!\n";
}
/**
* Run specific seeder
*/
private function runSeeder(string $seederName): void
{
$file = $this->seedersPath . '/' . $seederName . '.php';
if (!file_exists($file)) {
echo "Error: Seeder '{$seederName}' not found\n";
return;
}
$className = $this->getSeederClassName($seederName . '.php');
require_once $file;
if (!class_exists($className)) {
echo "Error: Seeder class '{$className}' not found\n";
return;
}
echo "Running seeder: {$seederName}\n";
$seeder = new $className();
$seeder->run();
echo "Seeder completed successfully!\n";
}
/**
* Get seeder class name
*/
private function getSeederClassName(string $filename): string
{
$name = pathinfo($filename, PATHINFO_FILENAME);
return "Database\\Seeders\\{$name}";
}
}