Laravel 5.4 Specyficzna migracja tabel

85

Cześć, przeczytaj całą dołączoną dokumentację tutaj w https://laravel.com/docs/5.4/migrations .

Czy istnieje sposób na migrację określonego pliku migracji (tylko 1 migracja), ponieważ teraz za każdym razem, gdy jest zmiana, której używam, php artisan migrate:refreshi wszystkie pola są resetowane.

Martney Acha
źródło

Odpowiedzi:

133

Najpierw powinieneś utworzyć jeden migrationplik dla swojej tabeli, taki jak:

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

Po utworzeniu folderu testowego w folderze migracji nowo utworzona migracja została przeniesiona / skopiowana do folderu testowego i uruchom poniższe polecenie w terminalu / cmd, na przykład:

php artisan migrate --path=/database/migrations/test/
AddWeb Solution Pvt Ltd.
źródło
Dzięki. To jest dokładnie to, czego szukałem.
sadiq
4
php artisan migrate --path = database / migrations / test /
working
Jeśli to nie działa, masz lepszą odpowiedź na stackoverflow.com/questions/19102197/ ...
Hari Harker
77

należy dodać ścieżkę do pliku migracji, aby odświeżyć tylko tę tabelę i uruchomić

php artisan migrate:refresh --path=/database/migrations/fileName.php
Wissem SASSI
źródło
1
Dobra robota stary. Nic nie działało, ale rozwiązanie zadziałało. Wielkie dzięki.
Vipertecpro
Dokładnie tego szukałem :) Dziękuję kolego
VishalParkash
czasami będzie to baza danych / migrations / fileName.php bez pierwszego odwrotnego ukośnika
Ahmed Aboud
Warto wspomnieć, że po odświeżeniu wszystkie dane znikną. Powinieneś zapisać dane w swojej bazie danych jako eksport i zaimportować je po odświeżeniu, jeśli chcesz zachować swoje dane.
Taranis
@Taranis Tylko dane tabeli, którą odświeżasz, nie wszystko
Wissem SASSI
54

Wystarczy spojrzeć na migrationstabelę w bazie danych, pojawi się lista nazw plików migracji i wartości numeru partii.

Załóżmy, że masz następującą strukturę,

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

Jeśli chcesz po prostu wycofać 2016_09_07_103432_create_tabel_rolesmigrację, zmień wartość partii migracji na 2, która jest najwyższa spośród wszystkich, a następnie wykonaj następujące czynności.

php artisan migrate:rollback

Tutaj tylko tabela z wartością partii 2 zostanie wycofana. Teraz wprowadź zmiany w tej tabeli i uruchom następujące polecenie konsoli.

php artisan migrate

Wartość partii w migrations tabeli określa kolejność migracji. podczas wycofywania migracje, które są najnowsze lub mają najwyższą wartość wsadu, są najpierw wycofywane, a następnie inne. Możesz więc zmienić wartość w bazie danych, a następnie przywrócić określony plik migracji.

Chociaż zmiana numeru partii za każdym razem nie jest dobrym pomysłem ze względu na relacje między strukturą tabeli, możemy zastosować ten przypadek w niektórych przypadkach, w których wycofanie pojedynczej tabeli nie narusza integralności między tabelami.

Nadzieję, że rozumiesz.

Sagar Gautam
źródło
@MartneyAcha Cieszę się, że masz rozwiązanie swojego problemu Na zdrowie !!
Sagar Gautam
Niezłe wyjaśnienie. Jeśli masz związek z kluczem obcym w swoim stole, to nie zadziała
Ogbonna Vitalis
@OgbonnaVitalis Dziękuję, będzie to łatwiejszy sposób na niezależne stoliki. Zaakceptowana odpowiedź daje dokładny sposób na wycofanie i migrację pojedynczej tabeli. dla wielu niezależnych tabel będzie działać.
Sagar Gautam
14

jeśli używasz zakładki do autouzupełniania

php artisan migrate --path='./database/migrations/2019_12_31_115457_create_coworking_personal_memberships_table.php'
Dawam Raja
źródło
nie działa dla mnie, używając zsh
digout
8

Musisz umieścić plik (i) w nowym katalogu (np .: wybrany), a następnie zastosować

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

jeśli potrzebujesz wycofania:

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

Uwaga:

php artisan migrate:refresh

spowoduje to wycofanie, a następnie migrację wszystkich plików migracji w domyślnym katalogu (/ database / migrations)

Ahmad Zahabi
źródło
Nie ma potrzeby tworzenia nowego katalogu, możesz umieścić bezpośrednio nazwę pliku, taką jak „--path = / database / migrations / fileName.php”.
Wissem SASSI
8

Możesz uruchomić polecenie w ten sposób

php artisan migrate --path=/database/migrations/2020_04_10_130703_create_test_table.php
Deathscript
źródło
7
php artisan help migrate

Zobaczysz opcję:

--path [= ŚCIEŻKA] Ścieżka do plików migracji do wykonania

Przy okazji możesz prawdopodobnie wskazać folder główny pliku, który chcesz przenieść:

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

Możesz też utworzyć nowy folder w migracji, a następnie przeprowadzić migrację wszystkich plików migracji, które chcesz w nim umieścić:

php artisan migrate --path=/database/migrations/new_folder
manh quan nguyen
źródło
właśnie przegapiłeś „s”. To powinny być „migracje”! php artisan migrate --path = / database / migrations / new_folder
Pasindu Jayanath
php artisan migrate --path = / database / migrations / new_folder / need the last '/'
Pasindu Jayanath
5

Chciałem tylko opublikować inne rozwiązanie, o którym myślę, że warto wspomnieć.

  1. Znajdź wiersz z nazwą migracji w tabeli migracji i USUŃ go. Powinien wyglądać tak: 2016_06_01_000001_create_oauth_auth_codes_table
  2. Usuń tabelę z bazy danych, np. DROP TABLE oauth_auth_codes
  3. Uruchom migrację php artisan

Przeniesie tylko potrzebną tabelę i nie będzie dotykać niczego innego

tylik
źródło
4

Jeśli chcesz stworzyć jedną i konkretną tabelę. Możesz użyć tego kodu. Działa z wersjami laravel (5.x).

php artisan migrate:refresh --path=/database/migrations/fileName.php
kayhanozturk
źródło
3

Usuń tabelę i usuń jej rekord z tabeli migracji.

Następnie ponownie uruchom migrację:

php artisan migrate
sskoko
źródło
3

Korekta - usuń ukośnik przed bazą danych

$ php artisan migrate --path=database/migrations/migration.php
TCruz
źródło
1
Nie ma nic do migracji.
zod
3

Migracja określonej tabeli

php artisan migrate --path=/database/migrations/fileName.php
Vishal Vaghasiya
źródło
2

Możesz też po prostu usunąć nazwę pliku migracji z bazy danych, w tabeli „migracje”, a następnie uruchomić: php artitsan migracja

Lasha Shonia
źródło
1

Możesz spróbować użyć opcji --path =, aby zdefiniować określony podfolder, który chcesz wykonać, i umieścić w nim określone migracje.

Alternatywnie musiałbyś usunąć odniesienia i tabele z bazy danych i tabel migracji, co nie jest idealne: /

Chris WB
źródło
1

Jeśli chcesz utworzyć kolejną tabelę, po prostu utwórz nowy plik migracji. To zadziała.

Jeśli utworzysz migrację o nazwie users_tablez id, first_name, last_name. Możesz utworzyć plik migracji, taki jak

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

Jeśli chcesz dodać kolejne pole, takie jak „status”, bez migracji: odśwież. Możesz utworzyć inny plik migracji, np. „Add_status_filed_to_users_table”

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

I nie zapomnij dodać opcji przywracania:

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

A kiedy uruchomisz migrację za pomocą php artitsan migration, po prostu dokonaj migracji nowego pliku migracji.

Ale jeśli dodasz „status” do pierwszego pliku mgration (tabela_użytkowników) i uruchomisz migrację. Nie ma nic do migracji. Musisz biec php artisan migrate:refresh.

Mam nadzieję, że to pomoże.

Nguyen Hoang
źródło
1

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

Po prostu postępuj zgodnie z instrukcją, wykonaj tę właściwą nazwę pliku, tutaj powinna być nazwa Twojej tabeli migracji Przykład: php artisan migrate --path = / database / migrations / 2020_02_21_101937_create_jobs_table.php

Mithun Rana
źródło
0

Możesz uruchomić to polecenie tylko w swoim terminalu

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

Po migracji należy podać konkretną nazwę pliku. lub jeśli masz jakiś folder wewnątrz migracji, po prostu dodaj nazwę tego folderu po migracji.

Lubię to

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

Mam nadzieję, że to ci trochę pomoże. Miłego kodowania.

Sayandeep Majumdar
źródło
-1

Najpierw powinieneś wykonać następujące polecenia:

Krok 1:

php artisan migrate:rollback

Krok 2:

php artisan migrate

Twój stół wróci do bazy danych.

Habibur Rahman
źródło
Byłoby bardziej pomocne, gdyby każdy krok zawierał krótki opis. Pomoże to w zrozumieniu użytkownika, co się właściwie dzieje. Wygląda to na kod, który w magiczny sposób sprawia, że ​​rzeczy działają, ale w niektórych przypadkach wynik może być katastrofalny.
Ashwani Agarwal
Przeczytaj uważnie pytanie, osoba poproszona tylko o jedną tabelę, Twoja metoda wycofa wszystkie migracje, a następnie utworzy wszystkie tabele. php artisan migration:refreshSłuży również temu samemu.
Wajahat Hashmi