phpvms/modules/Installer/Services/MigrationService.php

79 lines
1.9 KiB
PHP
Raw Normal View History

<?php
namespace Modules\Installer\Services;
use App\Interfaces\Service;
use Log;
use Nwidart\Modules\Facades\Module;
/**
* Class MigrationsService
* @package Modules\Installer\Services
*/
class MigrationService extends Service
{
/**
* @return \Illuminate\Database\Migrations\Migrator
*/
protected function getMigrator()
{
$m = app('migrator');
$m->setConnection(config('database.default'));
return $m;
}
/**
* Find all of the possible paths that migrations exist.
* Include looking in all of the modules Database/migrations directories
* @return array
*/
public function getMigrationPaths(): array
{
$paths = [
'core' => \App::databasePath() . '/migrations'
];
2018-06-22 22:26:08 +08:00
$modules = Module::allEnabled();
foreach ($modules as $module) {
$module_path = $module->getPath() . '/Database/migrations';
if(file_exists($module_path)) {
$paths[$module->getName()] = $module_path;
}
}
Log::info('Update - migration paths', $paths);
return $paths;
}
/**
* Return what migrations are available
*/
public function migrationsAvailable(): array
{
$migrator = $this->getMigrator();
$migration_dirs = $this->getMigrationPaths();
$files = $migrator->getMigrationFiles(array_values($migration_dirs));
$availMigrations = array_diff(array_keys($files), $migrator->getRepository()->getRan());
Log::info('Migrations available:', $availMigrations);
return $availMigrations;
}
/**
* Run all of the migrations that are available. Just call artisan since
* it looks into all of the module directories, etc
*/
public function runAllMigrations()
{
$output = '';
\Artisan::call('migrate');
$output .= trim(\Artisan::output());
return $output;
}
}