2014-02-08 99 views
6

所以我遷移文件夾是這樣的,因爲我有幾十它使組織和清潔用品表:Laravel運行的「應用/數據庫/遷移」文件夾遷移遞歸

migrations/ 
    create_user_table.php 
    relations/ 
    translations/ 

我試圖做一個刷新所有的遷移和種子,但似乎我遇到了輕微的打嗝,我不知道artisan命令遞歸運行遷移(即在relationstranslations文件夾中運行遷移)。

我試過添加--path="app/database/migrations/*"但是它吐出了一個錯誤。有誰知道這個解決方案?

+0

各地的網絡挖掘後,看起來這是不可能的事:https://github.com/laravel/framework/issues/2561 – tiffanyhwang

+0

有,爲什麼不選的理由/組織你的遷移是一件好事? – tiffanyhwang

+0

函數rei($文件夾) { $ 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 /'); –

回答

22

現在唯一的方法是手動完成所有的遷移。也就是說,你必須運行在每個子文件夾的遷移命令:

php artisan migrate --path=/app/database/migrations/relations 
php artisan migrate --path=/app/database/migrations/translations 

但是,你可以做什麼是很容易的擴展工匠系統編寫自己的遷移命令將通過遷移下的所有文件夾重複文件夾,爲你創建這些命令並運行它們。

你也可以簡單的寫一個shell腳本,如果你不想要進入通過工匠做這個

編輯:爲Laravel> = 5.0,正確的命令遷移文件遷移中的子目錄會:

php artisan migrate --path=/database/migrations/relations
php artisan migrate --path=/database/migrations/translations

+0

謝謝,我結束了腳本路線。 – tiffanyhwang

+0

這幫了我。雖然我很困惑,你會如何用這種方式回滾? –

1

這是一個沒有「直接」的解決方案,但我建議你看一下模塊化到您的laravel項目。

模塊可以將您的應用程序分割爲幾個較小的「文件夾」,並將遷移,種子,類,路線,控制器,命令集中到易於維護的文件夾中。

這個包是一個良好的開端:https://github.com/pingpong-labs/modules

1

在Laravel 5數據庫文件夾坐在旁邊默認應用程序文件夾中。所以,你可以運行這個遷移單個文件夾遷移:

php artisan migrate --path=/database/migrations/users 
0

一個簡單的Laravel解決方案是創建一個任務,一飲而盡(比如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 
+0

當我使用這個命令時,他們顯示錯誤 - 「'gulp'不被識別爲內部或外部命令,」 – Vipul

+0

@Vipul:安裝gulp(通過'npm install --global gulp')並重試。更多信息在這裏.. https://laravel.com/docs/5.0/elixir – shahalpk

0

在這裏你去!

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/'); 
7

您也可以使用通配符,像這樣:

php artisan migrate --path=/database/migrations/* 
0

這增加啓動方法AppServiceProvider

$mainPath = database_path('migrations');ň 
$directories = glob($mainPath . '/*' , GLOB_ONLYDIR); 
$paths = array_merge([$mainPath], $directories); 

$this->loadMigrationsFrom($paths); 

現在您使用可以php artisan migratephp artisan migrate:back

0

我改寫了MigrationServiceProvider:

- registerResetCommand() 
- registerStatusCommand() 
- registerMigrateCommand() 

在那裏,你可以註冊自己的命令:

class MigrateCommand extends Illuminate\Database\Console\Migrations\MigrateCommand 

之後,你只需要擴展你幾乎目錄:

protected function getMigrationPaths() 

,或者你只是註冊應用程序啓動時的路徑。 在我研究'$ this-> loadMigrationsFrom'之前,我已經完成了我的解決方案。

0

一個簡單的解決方案是創建一個工匠命令例如(遷移:所有),

然後手柄函數內部定義爲波紋管提到的每個子目錄遷移命令。

Artisan::call('migrate', [ 
    '--path' => '/database/migrations/employee' 
]);