Миграция конкретной таблицы Laravel 5.4


89

Привет, прочтите всю включенную документацию здесь, в https://laravel.com/docs/5.4/migrations .

Есть ли способ перенести определенный файл миграции (только 1 миграция), потому что прямо сейчас каждый раз, когда есть изменение, которое я использую, php artisan migrate:refreshи все поля сбрасываются.

Ответы:


136

Сначала вы должны создать один migrationфайл для своей таблицы, например:

public function up()
    {
        Schema::create('test', function (Blueprint $table) {
            $table->increments('id');
            $table->string('fname',255);
            $table->string('lname',255);
            $table->rememberToken();
            $table->timestamps();
        });
    }

После создания тестовой папки в папке миграции, вновь созданная миграция перемещена / скопирована в тестовую папку и запустите команду ниже в своем терминале / cmd, например:

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

1
Благодарю. Это именно то, что я искал.
sadiq

4
php artisan migrate --path = database / migrations / test / работал у меня
Joyal

Если это не
Хари Харкер,

86

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

php artisan migrate:refresh --path=/database/migrations/fileName.php

1
Хорошая работа, чувак. Ничего не сработало, но ваше решение сработало. Большое спасибо.
Vipertecpro

Именно я и искал :) Спасибо,
дружище

иногда это будет database / migrations / fileName.php без 1-й обратной косой черты
Ахмед Абуд

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

@Taranis Просто данные таблицы, которые вы обновляете не все
Wissem SASSI

54

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

Предположим, у вас есть следующая структура,

id     migration                                           batch

1      2014_10_12_000000_create_users_table                  1 
2      2014_10_12_100000_create_password_resets_table        1
3      2016_09_07_103432_create_tabel_roles                  1

Если вы хотите просто откатить 2016_09_07_103432_create_tabel_rolesмиграцию, измените значение пакета миграции на 2, которое является самым высоким среди всех, а затем просто выполните следующее.

php artisan migrate:rollback

Здесь будет произведен откат только таблицы с пакетным значением 2. Теперь внесите изменения в эту таблицу и выполните следующую консольную команду.

php artisan migrate

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

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

Надеюсь, вы понимаете.


@MartneyAcha Я счастлив, что у вас есть решение вашей проблемы. Ура !!
Сагар Гаутам

Хорошее объяснение. Если у вас есть отношения внешнего ключа в вашей таблице, это не сработает,
Огбонна Виталис

@OgbonnaVitalis Спасибо, это будет более простой способ для независимых таблиц. Принятый ответ дает точный способ отката и миграции отдельной таблицы. для нескольких независимых таблиц это будет работать.
Сагар Гаутам

15

если вы используете вкладку для автозаполнения

php artisan migrate --path='./database/migrations/2019_12_31_115457_create_coworking_personal_memberships_table.php'


8

Вам нужно поместить файл (ы) в новый каталог (например, выбранный), а затем применить

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

если нужен откат:

php artisan migrate:rollback  --path=/database/migrations/selected

Заметка:

php artisan migrate:refresh

это откатит, а затем перенесет все файлы миграции в каталог по умолчанию (/ database / migrations)


Нет необходимости создавать новый каталог, вы можете напрямую указать имя файла, например --path = / database / migrations / fileName.php.
Wissem

7
php artisan help migrate

Вы увидите вариант:

--path [= ПУТЬ] Путь к исполняемым файлам миграции.

Кстати, вы, вероятно, можете указать корневую папку файла, который хотите перенести:

php artisan migrate --path=/database/migrations/sample.php

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

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

вы только что пропустили "s". Это должны быть «миграции»! php artisan migrate --path = / database / migrations / new_folder
Pasindu Jayanath

php artisan migrate --path = / database / migrations / new_folder / нужен последний '/'
Pasindu Jayanath

5

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

  1. Найдите строку с вашим именем миграции в таблице миграции и УДАЛИТЕ ее. Должно получиться так: 2016_06_01_000001_create_oauth_auth_codes_table
  2. Удалите вашу таблицу из базы данных, например, DROP TABLE oauth_auth_codes
  3. Запустите php artisan migrate

Он перенесет только ту таблицу, которая вам нужна, и больше ничего не коснется


4

Если вы хотите создать одну конкретную таблицу. Вы можете использовать этот код. Работает для версий laravel (5.x).

php artisan migrate:refresh --path=/database/migrations/fileName.php


3

Удалите таблицу и удалите ее запись из таблицы миграции.

После этого вы снова запускаете миграцию:

php artisan migrate

3

Исправление - убрать косую черту перед базой

$ php artisan migrate --path=database/migrations/migration.php

1
Нечего переносить.
zod


2

Или вы можете просто удалить имя файла миграции из своей базы данных в таблице «миграции», а затем запустить: php artitsan migration


1

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

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


1

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

Если вы создаете миграцию users_tableс именем id, first_name, last_name. Вы можете создать файл миграции, например

    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('first_name',255);
            $table->string('last_name',255);
            $table->rememberToken();
            $table->timestamps();
        });
    }
    public function down()
    {
        Schema::dropIfExists('users');
    }

Если вы хотите добавить еще одно поле типа «status» без миграции: обновите. Вы можете создать другой файл миграции, например "add_status_filed_to_users_table"

public function up()
{
    Schema::table('users', function($table) {
        $table->integer('status');
    });
} 

И не забудьте добавить опцию отката:

public function down()
{
    Schema::table('users', function($table) {
        $table->dropColumn('status');
    });
}

И когда вы запускаете миграцию с php artitsan migration , он просто переносит новый файл миграции.

Но если вы добавите поле «status» в первый файл управления (users_table) и запустите миграцию. Перенести нечего. Вам нужно бежатьphp artisan migrate:refresh .

Надеюсь на эту помощь.



1

php artisan migrate --path = / database / migrations / fileName.php

Просто следуйте инструкциям, выполните это командное имя файла, здесь должно быть имя вашей таблицы миграции Пример: php artisan migrate --path = / database / migrations / 2020_02_21_101937_create_jobs_table.php


1

Вы можете запустить эту команду только в своем терминале

php artisan migrate --path=database/migrations/2020_10_01_164611_create_asset_info_table.php

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

Как это

php artisan migrate --path=database/migrations/yourfolder/2020_10_01_164611_create_asset_info_table.php

Я надеюсь, что это немного поможет вам. Удачного кодирования.



-1

Для начала вам нужно выполнить следующие команды:

Шаг 1:

php artisan migrate:rollback

Шаг 2:

php artisan migrate

Ваша таблица вернется в базу данных.


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

Пожалуйста, прочтите внимательно вопрос, человек запросил только одну таблицу, ваш метод откатит все миграции, а затем создаст все таблицы. И php artisan migration:refreshслужит то же самое.
Ваджахат Хашми,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.