nWidart / laravel-modules

Module Management In Laravel
https://docs.laravelmodules.com
MIT License
5.56k stars 969 forks source link

Refactor and Improve `module:migrate` and `module:migrate:fresh` Commands #1866

Closed alissn closed 5 months ago

alissn commented 5 months ago

Hi,

This pull request contains two main changes.

module:migrate:fresh


I moved the functionality of the module:migrate-fresh command to a new structure and extended it from baseCommand to allow selecting a specific module for migration.

Additionally, I refactored the module:migrate-fresh command to handle the fresh migration process manually with the following steps:

  1. Drop all tables.
  2. Create the migration table.
  3. Check and run the root migrations (excluding the Modules folder).
  4. Execute the module:migrate command for the selected module.

module:migrate


The previous functionality did not run migrations from subfolders in the database/migrations directory. Sometimes, custom folders are defined for migrations within a module to manage different versions or conditions, such as:

$this->loadMigrationsFrom(module_path($this->moduleName, 'database/migrations'));

foreach (range(1, $this->maxVersion()) as $version) {
    $this->loadMigrationsFrom(
        module_path($this->moduleName, "database/migrations/v{$version}")
    );
}

Or when migrations need to be loaded conditionally based on the existence of other modules:

$this->loadMigrationsFrom(module_path($this->moduleName, 'Database/Migrations'));

$modules = File::directories(module_path($this->moduleName, 'Database/Migrations/Modules/'));
foreach ($modules as $module) {
    $module = basename($module);
    if (checkModuleAvailable($module)) {
        $this->loadMigrationsFrom(module_path($this->moduleName, 'Database/Migrations/Modules/' . $module));
    }
}

This change retrieves the migration paths from Laravel's migrator and passes them to the migrate command, ensuring all necessary migrations are executed.

If you need more details, I can provide further explanations.

Thanks