Skip to content

Instantly share code, notes, and snippets.

@msulaimanmisri
Last active March 28, 2024 17:10
Show Gist options
  • Save msulaimanmisri/cbfd3a344bcd6c4178ad3aeb3082eaf7 to your computer and use it in GitHub Desktop.
Save msulaimanmisri/cbfd3a344bcd6c4178ad3aeb3082eaf7 to your computer and use it in GitHub Desktop.
Custom method to make Laravel Migration read the sub-folders inside migration folder
<?php
namespace App\Providers;
use Illuminate\Pagination\Paginator;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
//
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Model::ShouldBeStrict();
Paginator::useBootstrapFive();
// For sub-folder migration files
$migrationsPath = database_path('migrations');
$paths = $this->getAllMigrationFilesIncludingTheSubFolders($migrationsPath);
$this->loadMigrationsFrom($paths);
}
/**
* getAllMigrationFilesIncludingTheSubFolders
*
* @param string $directory
* @return array
*/
function getAllMigrationFilesIncludingTheSubFolders(string $directory): array
{
$directories = [];
$folders = array_diff(scandir($directory), ['.', '..']);
foreach ($folders as $folder) {
$path = $directory . DIRECTORY_SEPARATOR . $folder;
if (is_dir($path)) {
$directories[] = $path;
$directories = array_merge($directories, $this->getAllMigrationFilesIncludingTheSubFolders($path));
}
}
return $directories;
}
}
@msulaimanmisri
Copy link
Author

In order for this to work, you need to run php artisan make:migration --path=/database/migrations/your-sub-folder-name

Then run php artisan migrate

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment