Как запустить миграцию для определенной среды в laravel

Я создаю новое приложение с laravel (Laravel 4) и имею некоторые проблемы с настройкой базы данных через миграции.

Я сделал файл миграции с:

artisan migrate:make --table="jobs" --create jobs 

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

 artisan migrate --env=local 

Но я получаю ответ "Nothing to migrate"

Если я попробую запустить без --env=local , он использует database.php в папке config (не в локальной / промежуточной / производственной папке), которую мы не хотим использовать, так как это не будет специфично для среды.

Моя первая мысль была в порядке, может быть, мне нужно поставить флаг env на migrate:make call, поэтому я попробовал это, но получил ошибку, заявив, что не может создать файл миграции. Тогда я подумал, что в любом случае нет смысла делать env-ориентированные миграции … они должны быть созданы родовыми и просто запускаться на основе env, поэтому в конце все среды используют одни и те же сценарии миграции.

Поэтому я немного застрял здесь, куда идти отсюда

Перед командой migrate необходимо указать среду.

 artisan --env=local migrate 

Запуск artisan help показывает формат, в котором должны следовать команды.

 artisan help Usage: [options] command [arguments] 

Решено.

Решение состояло в том, чтобы просто отредактировать файл local / database.php (или production / database.php и т. Д.), Убедившись, что переменная пути миграции указывает на местоположение, которое migrate:make создает файлы миграции, просто измените

 'application' => __DIR__.'/../database/migrations', 

в

 'application' => DIR.'/../../database/migrations', 

Если вы измените миграцию после ее запуска, сначала вам нужно отменить миграцию.

 php artisan migrate:rollback 

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

 php artisan migrate:reset 

Но тогда вам нужно будет назвать свои миграции нормальными, чтобы обновить их.

 php artisan migrate 

Наконец, вы можете выполнить сброс, а затем выполнить миграцию, вызвав

 php artisan rebuild 

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

Надеюсь это поможет.

Редактировать: я как-то пропустил индикатор Laravel 4. Большинство из этих команд все еще работают, я верю, но вам, возможно, придется приспособиться.

Я вычислил решение для запуска migrate для разных баз данных. В принципе, команда artisan migrate --env=local не работает. Но мы можем определить новую строку соединения в config\database.php . Например:

 <?php 'mysql_testing' => [ 'driver' => 'mysql', 'host' => env('DB_TESTING_HOST'), 'database' => env('DB_TESTING_DATABASE'), 'username' => env('DB_TESTING_USERNAME'), 'password' => env('DB_TESTING_PASSWORD'), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => 'prefix_', ], 

И укажите --database когда мы запускаем artisan migrate следующим образом:

 php artisan migrate --database=mysql_testing 

Надеюсь это поможет 🙂