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('Не удалось откатить миграции');
|
||
}
|
||
}
|
||
|
||
} |