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


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

13 52

13 ответов:

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

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

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

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

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

EDIT:

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

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

2013_01_20_221554_table

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

2013_01_19_221554_myFirstMigration

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

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

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

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

просто мои два цента! Надеюсь, что --pretend помогает.

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

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

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

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

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

mkdir /database/migrations/my_migrations

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

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

надеюсь, что это помогает!

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

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

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

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

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

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

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

удачи

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

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

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

грязный обходной путь, но он работает...

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

php artisan migrate

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

php artisan migrate: rollback

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

  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.

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

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

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