Выполнение одной конкретной миграции на laravel 4 (один файл)

53

Я не хочу запускать все выдающиеся мигранты на laravel 4. У меня 5 миграций. Теперь я просто хочу выполнить одну миграцию.  вместо выполнения: php artisan migrate Я хотел бы выполнить одну конкретную миграцию, например: php artisan migigate MY_MIGRATION_TO_RUN

  • 1
    У меня тоже есть такой же вариант использования. Там должен быть такой вариант. Мне нужно запустить миграцию, затем большой скрипт etl, а затем запустить вторую половину миграции. Нет смысла, что второй файл не должен быть в моей базе кода, пока не будет запущен скрипт etl.
  • 0
    php artisan migrate --path="app/database/migrations/my_single_migration"
Теги:
migration
laravel-4

13 ответов

44
Лучший ответ

Похоже, вы делаете это неправильно.

Миграции выполнялись Laravel один за другим, в том порядке, в котором они были созданы, поэтому он может отслеживать выполнение и порядок выполнения. Таким образом, Laravel сможет БЕСПЛАТНО откатить пакет миграции, не рискуя сломать вашу базу данных.

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

Если вам действительно нужно что-то выполнить в своей базе данных, лучше создать DDL script и выполнить его вручную на своем веб-сервере.

Или просто создайте новую миграцию и выполните ее с помощью artisan.

EDIT:

Если вам нужно сначала запустить его, сначала его нужно создать.

Если вам просто нужно переупорядочить их, переименуйте файл первым. Миграции создаются с помощью timestemp:

2013_01_20_221554_table

Чтобы создать новую миграцию до этого, вы можете назвать ее

2013_01_19_221554_myFirstMigration
  • 3
    Да, так ясно, что вы говорите, но в конце вашего комментария я вижу: «Или просто создайте новую миграцию и выполните ее с помощью ремесленника». Я создал новую миграцию, и я хотел бы запустить ее. Если я сделаю: ремесленник мигрирует, этот командир будет выполнять всю мою миграцию, а не новую, которую я создал.
  • 0
    Если вам нужно запустить его ПЕРВЫМ, сначала нужно создать его. Миграции создаются с временной меткой имени (2013_01_20_221554_table), просто переименуйте свою, чтобы стать первой.
Показать ещё 14 комментариев
33

Просто переместите уже запущенные миграции из папки app/config/database/migrations/. Затем запустите команду php artisan migrate. Работала как прелесть для меня.

  • 2
    попробовал это, и это хорошо, но я не буду, если у меня возникнет проблема при откате, хотя
  • 0
    да @Diamond, как и для модуля на основе плагинов, когда нужно удалить, тогда это может быть большой проблемой для отката ..
21

Хороший небольшой фрагмент, чтобы облегчить любые опасения при запуске миграции Laravel 4 php artisan migrate --pretend. Это приведет к выходу SQL, который был бы запущен, если вы выполнили фактическую миграцию.

Похоже, что начальные 4 миграции уже запущены. Я бы предположил, что когда вы php artisan migrate, он выполнит только новую, недавнюю миграцию.

Совет: убедитесь, что все ваши функции up() и down() работают так, как вы ожидаете. Мне нравится запускать(), down(), up(), когда я запускаю свои миграции, чтобы проверить их. Было бы ужасно, если бы вы получили 5-6 переходов и поняли, что не можете откатить их обратно без хлопот, потому что вы не сопоставляете down() с up() 100% процентов.

Просто мои два цента! Надеемся, что --pretend поможет.

  • 0
    отличный! обеспечивает дополнительное спокойствие
  • 0
    спасибо, что рассказали о притворстве
17

Вы можете переносить миграцию в другие папки и запускать что-то вроде:

php artisan migrate --path=/app/database/migrations/my_migrations
15

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

Затем запустите php artisan снова.

  • 1
    Также вы можете установить поле «партия» - миграция запускает (и откатывает) миграции по одной партии за раз, так что вы можете просто изменить номер партии, чтобы откатить одну миграцию.
  • 0
    мы не можем сделать это с таблицей миграций. This table does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available.
Показать ещё 2 комментария
3

Я дал этот ответ на другой пост, но вы можете сделать это: запустите artisan migrate, чтобы запустить все миграции, а затем следующие команды SQL, чтобы обновить таблицу миграций, сделав ее похожей на миграцию, выполняемую по одному за раз

SET @a = 0;  
UPDATE migrations SET batch = @a:=@a+1;

Это изменит колонку пакета на 1, 2, 3, 4 и т.д. Добавьте там WHERE batch>=... условие (и обновите начальное значение @a), если вы хотите только повлиять на некоторые миграции.

После этого вы можете artisan migrate:rollback столько, сколько требуется, и он будет проходить через миграции по одному за раз.

2

Вы можете создать отдельный каталог для своих миграций с вашего терминала следующим образом:

mkdir /database/migrations/my_migrations

И затем переместите конкретный перенос, который вы хотите запустить в этот каталог, и запустите эту команду:

php artisan migrate --path=/database/migrations/my_migrations

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

1

У меня такая же проблема. Скопируйте коды создания таблицы в первый файл миграции, как показано ниже:

  public function up()
    {
        Schema::create('posts', function(Blueprint $table){
            $table->increments('id');
            // Other columns...
            $table->timestamps();
        });
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            // Other columns...
            $table->softDeletes()->nullable();
        });
    }

Также вы можете изменить (уменьшить) номер столбца batch в таблице migrations;)

И затем запустите php artisan migrate.

1

Если вы хотите запустить свой последний файл миграции, вы должны сделать следующее:

php artisan migrate

Вы также можете вернуться назад, прежде чем добавить перенос с помощью:

php artisan migrate: rollback
1

Если это просто для тестирования, вот как я это делаю:

В моем случае у меня есть несколько миграций, один из которых содержит параметры App-Settings.

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

Грязное обходное решение, но оно работает...

0

Есть один простой способ, который я знаю, чтобы сделать это можно только для вас только на локальном хосте

  • Модифицировать файл миграции по мере необходимости
  • откройте свой phpMyAdmin или все, что вы используете, чтобы увидеть таблицу своей базы данных.
  • найдите нужную таблицу и отпустите ее
  • найдите таблицу миграции и откройте ее.
  • в этой таблице в поле миграции найдите нужное имя таблицы и удалите ее строку
  • выполните команду php artisan migrate из командной строки или терминала. это приведет только к миграции таблиц, которые не существуют в таблице миграции в базе данных.

Этот способ абсолютно безопасен и не будет делать никаких ошибок или проблем, пока он выглядит непрофессионально, но он все равно отлично работает.

удача

0

Выбросьте исключение в переносе, если вы не хотите его применять, и это остановит весь процесс миграции.

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

0

так просто...! просто перейдите в папку переноса. переместите все файлы миграции в другую папку. затем верните все миграции один за другим в папку миграции и выполните миграцию для одного из них (php artisan). когда вы вставляете файл с плохой миграцией в главную папку миграции и запускаете миграцию php artisan в командной строке, будет ошибка.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню