Fix MigrationRunner to properly detect migration class names from filenames
This commit is contained in:
parent
23a8dbcaf6
commit
1db39e1328
|
|
@ -136,23 +136,39 @@ class MigrationRunner
|
|||
return null;
|
||||
}
|
||||
|
||||
require_once $filename;
|
||||
|
||||
$className = basename($filename, '.php');
|
||||
|
||||
// Попробуем найти класс в файле
|
||||
$declaredClasses = get_declared_classes();
|
||||
$migrationClass = null;
|
||||
|
||||
foreach ($declaredClasses as $declaredClass) {
|
||||
if (strpos($declaredClass, $className) !== false) {
|
||||
$migrationClass = $declaredClass;
|
||||
break;
|
||||
}
|
||||
// Получаем имя класса из имени файла (001_create_base_tables.php -> CreateBaseTables)
|
||||
$fileName = basename($filename, '.php');
|
||||
$classNameParts = explode('_', $fileName);
|
||||
// Пропускаем номер (первую часть), если он числовой
|
||||
if (is_numeric($classNameParts[0])) {
|
||||
array_shift($classNameParts);
|
||||
}
|
||||
$className = '';
|
||||
foreach ($classNameParts as $part) {
|
||||
$className .= ucfirst($part);
|
||||
}
|
||||
|
||||
if ($migrationClass && class_exists($migrationClass)) {
|
||||
return new $migrationClass();
|
||||
// Проверяем, существует ли класс
|
||||
if (!class_exists($className)) {
|
||||
// Если класс не существует, подключаем файл
|
||||
require_once $filename;
|
||||
}
|
||||
|
||||
// Проверяем снова, существует ли класс
|
||||
if (class_exists($className)) {
|
||||
return new $className();
|
||||
}
|
||||
|
||||
// Если не нашли класс по преобразованному имени, пробуем другие подходы
|
||||
$declaredClasses = get_declared_classes();
|
||||
foreach ($declaredClasses as $declaredClass) {
|
||||
// Проверяем, не является ли класс потомком BaseMigration
|
||||
$reflection = new \ReflectionClass($declaredClass);
|
||||
if ($reflection->isSubclassOf('\App\BaseMigration') ||
|
||||
($reflection->getName() === '\App\BaseMigration') ||
|
||||
$reflection->isSubclassOf('App\BaseMigration')) {
|
||||
return new $declaredClass();
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
|
|
|
|||
Loading…
Reference in New Issue