2014-02-08 4 views
6

Так моя папка миграции выглядит это, так как у меня есть десятки таблиц он хранит вещи организованы и чистые:Laravel работает миграцию на папке «приложение/базы данных/миграция» рекурсивен

migrations/ 
    create_user_table.php 
    relations/ 
    translations/ 

Я пытаюсь сделать обновить все миграции и семя, но похоже, что я столкнулся с небольшим сбоем, когда я не знаю, что команда artisan рекурсивно запускает миграцию (т. е. запускает миграцию в папках).

Я попытался добавить --path="app/database/migrations/*", однако он выплюнул ошибку. Кто-нибудь знает решение этого?

+0

После покопаться в Интернете, похоже, что это невозможно сделать: https://github.com/laravel/framework/issues/2561 – tiffanyhwang

+0

Есть ли причина, почему не сортировать/упорядочивать миграции хорошая вещь ? – tiffanyhwang

+0

функция rei ($ folder) { $ iterator = new DirectoryIterator ($ folder); system ("php artisan migrate --path =". $ Folder); foreach ($ iterator as $ fileinfo) { if ($ fileinfo-> isDir() &&! $ Fileinfo-> isDot()) { echo $ fileinfo-> getFilename(). "\ П"; rei ($ folder. $ Fileinfo-> getFilename(). '/'); } } } rei ('./ database /'); –

ответ

22

Единственный способ сделать это прямо сейчас - это вручную пройти все миграции. То есть, вы должны выполнить команду миграции на каждом из ваших подпапок:

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

Однако то, что вы можете сделать, это легко расширить систему мастеровых, чтобы написать свою собственную команду перенастройки, который будет перебирать все папки под миграцией папку, создайте эти команды для вас и запустите их.

Вы также можете просто написать скрипт, если вы не хотите, чтобы попасть в этом через ремесленник

Edit: для 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: install 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 migrate, а также php artisan migrate:back

0

я переписал MigrationServiceProvider:

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

Там вы можете зарегистрировать свои собственные команды:

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

После этого вам просто нужно расширить Youd справочники:

protected function getMigrationPaths() 

Или вы просто зарегистрироваться пути при загрузке приложения. Я уже выполнил свое решение, прежде чем я заговорил о «$ this-> loadMigrationsFrom».

0

Простое решение заключается в создании команды Artisan, например (миграция: все),

затем внутри функции ручки определяет команду переноса для каждых подкаталогов, как указано ниже.

Artisan::call('migrate', [ 
    '--path' => '/database/migrations/employee' 
]); 
Смежные вопросы