何十ものテーブルがあるので、migrationsフォルダーは次のようになります。
migrations/
create_user_table.php
relations/
translations/
すべてのマイグレーションとシードを更新しようとしていますが、マイグレーションを再帰的に実行するためのアーティザンコマンドがわからない(つまり、relations
でマイグレーションを実行する) translations
フォルダも)。
追加しようとしました--path="app/database/migrations/*"
ただし、エラーが発生します。誰かがこれの解決策を知っていますか?
現在それを行う唯一の方法は、すべての移行を手動で行うことです。つまり、各サブフォルダーで移行コマンドを実行する必要があります。
php artisan migrate --path=/app/database/migrations/relations
php artisan migrate --path=/app/database/migrations/translations
ただし、できることは、Artisanシステムを簡単に拡張して、migrationsフォルダーの下のすべてのフォルダーを反復処理する独自の移行コマンドを記述し、これらのコマンドを作成して実行することです。
職人を介してこれを実行したくない場合は、単にシェルスクリプトを記述することもできます。
編集:Laravel> = 5.0の場合、サブディレクトリの移行ファイルを移行するための正しいコマンドは次のとおりです:
php artisan migrate --path=/database/migrations/relations
php artisan migrate --path=/database/migrations/translations
これはbootメソッドに追加AppServiceProviderのメソッド
$mainPath = database_path('migrations');ň
$directories = glob($mainPath . '/*' , GLOB_ONLYDIR);
$paths = array_merge([$mainPath], $directories);
$this->loadMigrationsFrom($paths);
今あなたは缶を使うphp artisan migrate
およびphp artisan migrate:back
次のようにワイルドカードを使用することもできます。
php artisan migrate --path=/database/migrations/*
Laravel 5では、データベースフォルダーはデフォルトでアプリフォルダーの横に配置されます。したがって、これを実行して単一フォルダーの移行を移行できます。
php artisan migrate --path=/database/migrations/users
次のコマンドを使用して、これを再帰的に実行できます。
php artisan migrate --path=/database/migrations/**/*
**/*
はglobstar
とも呼ばれます
これが機能する前に、bashがglobstarをサポートしているかどうかを確認する必要があります。これを行うには、shopt
を実行してglobstar
をチェックします。
Globstarは、ほとんどのサーバーディストリビューションでデフォルトでサポートされていますが、MACでは機能しない可能性があります。
Globstarの詳細については、以下を参照してください。 https://www.linuxjournal.com/content/globstar-new-bash-globbing-option
これは「直接的な」解決策ではありませんが、laravelプロジェクトでモジュール性を検討することをお勧めします。
モジュールは、アプリケーションをいくつかの小さな「フォルダー」に分割し、移行、シード、クラス、ルート、コントローラー、コマンドを簡単にメンテナンス可能なフォルダーにまとめることができます。
このパッケージは良いスタートです: https://github.com/pingpong-labs/modules
簡単なLaravel解決策は、gulpタスクを作成することです(たとえばmigrate-others
)。
var elixir = require('laravel-elixir');
var gulp = require('gulp');
var Shell = require('gulp-Shell')
/*
|--------------------------------------------------------------------------
| Elixir Asset Management
|--------------------------------------------------------------------------
|
| Elixir provides a clean, fluent API for defining some basic Gulp tasks
| for your Laravel application. By default, we are compiling the Sass
| file for our application, as well as publishing vendor resources.
|
*/
elixir(function(mix) {
mix.sass('app.scss');
});
// Our Task
gulp.task('migrate-others', Shell.task([
'php artisan migrate --path=/app/database/migrations/relations',
'php artisan migrate --path=/app/database/migrations/translations',
]));
今、あなたは単に呼び出すことができます
gulp migrate-others
簡単な解決策は、たとえば(igrate:all)のようなArtisanコマンドを作成することです。
次に、以下に説明するように、ハンドル関数内で各サブディレクトリの移行コマンドを定義します。
Artisan::call('migrate', [
'--path' => '/database/migrations/employee'
]);
どうぞ!
function rei($folder)
{
$iterator = new DirectoryIterator($folder);
system("php artisan migrate --path=" . $folder);
foreach ($iterator as $fileinfo) {
if ($fileinfo->isDir() && !$fileinfo->isDot()) {
echo $fileinfo->getFilename() . "\n";
rei($folder . $fileinfo->getFilename() . '/');
}
}
}
rei('./database/');
MigrationServiceProviderを書き直しました。
- registerResetCommand()
- registerStatusCommand()
- registerMigrateCommand()
そこで、独自のコマンドを登録できます。
class MigrateCommand extends Illuminate\Database\Console\Migrations\MigrateCommand
その後、あなたはあなただけのディレクトリを拡張する必要があります:
protected function getMigrationPaths()
または、アプリケーションの起動時にパスを登録するだけです。 「$ this-> loadMigrationsFrom」について理解する前に、すでに解決策を実行しました。
相対パスのみが機能します(Laravel 5.7):
php artisan migrate --path=database/migrations/your-folder-with-migrations