Laravel 5.4 Специфічна міграція таблиці


85

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

Чи є спосіб, як перенести певний файл міграції (лише 1 міграція), тому що зараз кожен раз, коли я використовую зміни, php artisan migrate:refreshі всі поля скидаються.

Відповіді:


133

Спочатку слід створити один 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/

Дякую. Це саме те, що я шукав.
sadiq

4
php artisan migrate --path = database / migrations / test / спрацював для мене
Джоял

Якщо це не вдається, у вас є краща відповідь на stackoverflow.com/questions/19102197/…
Харі Харкер,

76

вам слід додати шлях до вашого файлу міграції, щоб оновити лише цю таблицю та запустити

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

1
Гарна робота Людина. Нічого не працювало, але ви працювали з рішенням. Подяка багато.
Vipertecpro

Точно я шукав :) Дякую товаришу
VishalParkash

іноді це буде база даних / міграції / fileName.php без першої зворотної скісної риски
Ахмед Абуд,

Варто зазначити, що після оновлення всі ваші дані зникли. Вам слід зберегти дані у вашій базі даних як експорт та імпортувати їх після оновлення, якщо ви хочете зберегти ваші дані.
Тараніс

@Taranis Тільки дані таблиці, які ви
освіжаєте

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 Дякую, це буде простіший спосіб для незалежних таблиць. Прийнята відповідь дає точний спосіб відкату та перенесення однієї таблиці. для декількох незалежних таблиць це буде працювати.
Сагар Гаутам,

14

якщо ви використовуєте вкладку для автозаповнення

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

у мене не працює, використовуючи zsh
digout

8

Вам потрібно помістити файли в новий каталог (наприклад: вибраний), а потім застосувати

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

якщо вам потрібен відкат:

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

Примітка:

php artisan migrate:refresh

це відкатить, а потім перенесе всі файли міграції в каталог за замовчуванням (/ база даних / міграції)


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


7
php artisan help migrate

Ви побачите варіант:

--path [= 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 / need the last '/'
Pasindu Jayanath

5

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

  1. Знайдіть у таблиці міграцій рядок із своїм ім’ям міграції та ВИДАЛІТЬ його. Це має виглядати так: 2016_06_01_000001_create_oauth_auth_codes_table
  2. Видаліть свою таблицю з бази даних, наприклад, ВПАДНІ ТАБЛИЦИ oauth_auth_codes
  3. Запустити php artisan migrate

Він перемістить лише потрібну вам таблицю і більше нічого не торкнеться


3

Ви можете зробити лише відкат:

php artisan migrate:rollback

https://laravel.com/docs/5.4/migrations#rolling-back-migrations

Ви можете вказати, на скільки міграцій повернутися назад, використовуючи параметр "step":

php artisan migrate:rollback --step=1

Деякі хитрощі доступні тут:

Відкат однієї конкретної міграції в Laravel


3

Видаліть таблицю та видаліть її запис із таблиці міграції.

Після цього ви просто запускаєте міграцію знову:

php artisan migrate

3

Виправлення - видалити скісну риску перед базою даних

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

1
Нічого для міграції.
Zod


3

Якщо ви хочете створити одну та конкретну таблицю. Ви можете використовувати цей код. Це працює для версій laravel (5.x).

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

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');
    }

Якщо ви хочете додати ще один файл, наприклад "статус" без перенесення: оновіть. Ви можете створити ще один файл міграції, наприклад "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, він просто мігрує новий файл міграції.

Але якщо ви додасте поданий "статус" у перший файл mgration (users_table) і запустите міграцію. Мігрувати нічого. Вам потрібно бігти php artisan migrate:refresh.

Сподіваюся, це допоможе.



1

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

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



0

Цю команду можна запустити лише у своєму терміналі

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.