60 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						||
 | 
						||
namespace kernel\services;
 | 
						||
 | 
						||
use Illuminate\Database\Migrations\DatabaseMigrationRepository;
 | 
						||
use Illuminate\Database\Migrations\Migrator;
 | 
						||
use Illuminate\Filesystem\Filesystem;
 | 
						||
use kernel\App;
 | 
						||
use kernel\helpers\Debug;
 | 
						||
 | 
						||
class MigrationService
 | 
						||
{
 | 
						||
    protected ModuleService $moduleService;
 | 
						||
 | 
						||
    public function __construct()
 | 
						||
    {
 | 
						||
        $this->moduleService = new ModuleService();
 | 
						||
    }
 | 
						||
 | 
						||
    /**
 | 
						||
     * @throws \Exception
 | 
						||
     */
 | 
						||
    public function runAtPath(string $path = ROOT_DIR . '/migrations'): array
 | 
						||
    {
 | 
						||
        $path = getConst($path);
 | 
						||
//        Debug::dd($path);
 | 
						||
 | 
						||
        try {
 | 
						||
            $dmr = new DatabaseMigrationRepository(App::$db->capsule->getDatabaseManager(), 'migration');
 | 
						||
 | 
						||
            $m = new Migrator($dmr, App::$db->capsule->getDatabaseManager(), new Filesystem());
 | 
						||
 | 
						||
            return $m->run($path);
 | 
						||
        } catch (\Exception $e) {
 | 
						||
            throw new \Exception('Не удалось поднять миграции');
 | 
						||
        }
 | 
						||
    }
 | 
						||
 | 
						||
    public function rollbackAtPath(string $path): void
 | 
						||
    {
 | 
						||
        $path = getConst($path);
 | 
						||
        try {
 | 
						||
            $filesystem = new Filesystem();
 | 
						||
            $dmr = new DatabaseMigrationRepository(App::$db->capsule->getDatabaseManager(), 'migration');
 | 
						||
 | 
						||
            $m = new Migrator($dmr, App::$db->capsule->getDatabaseManager(), $filesystem);
 | 
						||
 | 
						||
            $migrationFiles = $m->getMigrationFiles($path);
 | 
						||
            foreach ($migrationFiles as $name => $migrationFile){
 | 
						||
                $migrationInstance = $filesystem->getRequire($migrationFile);
 | 
						||
                $migrationInstance->migration = $name;
 | 
						||
                $migrationInstance->down();
 | 
						||
                $dmr->delete($migrationInstance);
 | 
						||
            }
 | 
						||
        } catch (\Exception $e) {
 | 
						||
            throw new \Exception('Не удалось откатить миграции');
 | 
						||
        }
 | 
						||
    }
 | 
						||
 | 
						||
} |