getName(); // Check if already executed if ($this->seedRepository->hasRun($name)) { $this->log("Skipping seeder '{$name}' - already executed", 'info'); return; } $this->log("Running seeder '{$name}'...", 'info'); try { $seeder->seed(); $this->seedRepository->markAsRun($name, $seeder->getDescription()); $this->log("Seeder '{$name}' completed successfully", 'info'); } catch (\Throwable $e) { $this->log("Seeder '{$name}' failed: {$e->getMessage()}", 'error'); throw $e; } } /** * Run multiple seeders * * @param Seeder[] $seeders Array of seeders to run */ public function runAll(array $seeders): void { foreach ($seeders as $seeder) { $this->run($seeder); } } /** * Log a message if logger is available */ private function log(string $message, string $level = 'info'): void { if ($this->logger !== null) { match ($level) { 'error' => $this->logger->error($message), 'warning' => $this->logger->warning($message), default => $this->logger->info($message), }; } else { // Fallback to echo if no logger available echo "[{$level}] {$message}\n"; } } }