Пометить миграцию как запущенную в laravel

Моя миграция не удалась, поэтому я просто выполнил запрос вручную в MySQL Workbench.

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

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

php artisan migrate:status 

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

Я полагаю, я мог бы также... удалить миграцию.


person Andrew    schedule 24.02.2018    source источник


Ответы (4)


Я только что сделал следующее:

  1. Закомментировано содержимое метода YourMigrationClass::up(). Как это:

    class AddSessionIdToActivitiesTable extends Migration
    {
    
        public function up()
        {
            /* commenting this out:
            Schema::table('activities', function (Blueprint $table) {
                $table->integer('session_id')->nullable();
            });
            */
        }
    
  2. Выполнить: php artisan migrate

  3. Убедитесь, что он помечен как "Ran?": php artisan migrate:status

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

person pilat    schedule 17.10.2018

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

В laravel 5.7 (и, возможно, в некоторых более ранних версиях) вам необходимо заполнить информацию о миграции в базе данных (в таблице migrations).

Необходимая информация — это migration (имя файла без расширения .php) и номер batch (чтобы решить, какие миграции запускать сразу, например, при откате миграции)

Сначала вы должны увидеть, какой номер последней партии:

SELECT MAX(batch) from migrations;

Допустим, приведенный выше запрос возвращает 42, тогда мы должны вставить данные с номером пакета 42 + 1 = 43.

Предположим, что миграция, которую вы хотите пометить как запущенную, имеет номер database/migrations/2019_01_29_091850_update_jobs_table_for_laravel_5_3.php,

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

-- note that you should not include the .php extension
INSERT INTO migrations VALUES ("2019_01_29_091850_update_jobs_table_for_laravel_5_3", 43);

Затем запуск php artisan migrate:status сообщит о выполнении миграции.

Может быть, вы сможете выполнить задачу с помощью одного запроса... Я оставлю эту задачу открытой для комментариев экспертов по sql.

person Fer    schedule 29.01.2019
comment
Совет: вы должны убедиться, что временная метка даты, которая добавляется к вашему имени миграции, точно соответствует тому, что показывает ваш миграционный статус. Я совершил ошибку, просто используя время, которое я видел в своем файле миграции, которое было примерно таким: 2021_07_29_150329 (предваряемое _my_migration_name). Но я продолжал получать статус не запущен. Я видел, что миграция: статус показывает 2021_07_29_183341, поэтому, когда я обновил запись в таблице, статус миграции показал, что он выполняется правильно. Видимо, даже эта часть имени имеет значение. - person McAuley; 05.08.2021

В настоящее время (Laravel ‹= 5.6) нет команды для обновления базы данных, чтобы пометить миграцию как выполненную. Вам просто нужно будет сделать это вручную.

person Aken Roberts    schedule 24.02.2018

Вы всегда можете создать свои собственные ремесленные команды.

person Tim    schedule 24.02.2018