Laravel 5.4 Spezifische Tabellenmigration

85

Hallo, lesen Sie die gesamte mitgelieferte Dokumentation hier unter https://laravel.com/docs/5.4/migrations .

Gibt es eine Möglichkeit, eine bestimmte Migrationsdatei zu migrieren (nur 1 Migration), da jedes Mal, wenn ich eine Änderung verwende php artisan migrate:refreshund alle Felder zurückgesetzt werden.

Martney Acha
quelle

Antworten:

133

Zuerst sollten Sie eine migrationDatei für Ihre Tabelle erstellen, wie:

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

Nach dem Erstellen Testordner in Migrationen Ordner dann neu angelegte Migration verschoben / in kopiert Testordnern und unter Befehl in Ihrem Laufe Terminal / cmd wie:

php artisan migrate --path=/database/migrations/test/
AddWeb Solution Pvt Ltd.
quelle
Vielen Dank. Genau das habe ich gesucht.
Sadiq
4
PHP Artisan Migrate - Path = Datenbank / Migrationen / Test / arbeitete für mich
Joyal
Wenn dies nicht funktioniert, haben Sie eine bessere Antwort auf stackoverflow.com/questions/19102197/…
Hari Harker
76

Sie sollten den Pfad zu Ihrer Migrationsdatei hinzufügen, um nur diese Tabelle zu aktualisieren und auszuführen

php artisan migrate:refresh --path=/database/migrations/fileName.php
Wissem SASSI
quelle
1
Gute Arbeit. Nichts hat funktioniert, aber Ihre Lösung hat funktioniert. Vielen Dank.
Vipertecpro
Genau das habe ich gesucht :) Danke Kumpel
VishalParkash
Manchmal ist es database / migrations / fileName.php ohne den ersten Backslash
Ahmed Aboud
Es ist erwähnenswert, dass mit einer Aktualisierung alle Ihre Daten verschwunden sind. Sie sollten die Daten in Ihrer Datenbank als Export speichern und nach der Aktualisierung importieren, wenn Sie Ihre Daten behalten möchten.
Taranis
@Taranis Nur die Daten der Tabelle, die Sie
aktualisieren,
54

Schau dir das an migrations Tabelle in Ihrer Datenbank an. Es wird eine Liste mit dem Namen der Migrationsdatei und dem Wert der Chargennummer angezeigt.

Angenommen, Sie haben folgende 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

Wenn Sie nur die 2016_09_07_103432_create_tabel_rolesMigration zurücksetzen möchten , ändern Sie den Migrationsstapelwert auf 2, der unter allen am höchsten ist, und führen Sie dann einfach Folgendes aus.

php artisan migrate:rollback

Hier wird nur die Tabelle mit dem Stapelwert 2 zurückgesetzt. Nehmen Sie nun Änderungen an dieser Tabelle vor und führen Sie den folgenden Konsolenbefehl aus.

php artisan migrate

Chargenwert in der migrations Tabelle definiert die Reihenfolge der Migrationen. Wenn Sie ein Rollback durchführen, werden Migrationen, die aktuell sind oder den höchsten Stapelwert haben, zuerst und dann andere zurückgesetzt. Sie können also den Wert in der Datenbank ändern und dann eine bestimmte Migrationsdatei zurücksetzen.

Obwohl es aufgrund der Beziehung zwischen der Tabellenstruktur nicht ratsam ist, die Chargennummer jedes Mal zu ändern, können wir diesen Fall in einigen Fällen verwenden, in denen das Zurücksetzen einzelner Tabellen die Integrität zwischen den Tabellen nicht verletzt.

Ich hoffe du verstehst.

Sagar Gautam
quelle
@MartneyAcha Ich bin froh, dass du eine Lösung für dein Problem hast. Prost !!
Sagar Gautam
Schöne Erklärung. Wenn Sie eine Fremdschlüsselbeziehung in Ihrer Tabelle haben, wird das nicht funktionieren
Ogbonna Vitalis
@OgbonnaVitalis Vielen Dank, es wird einfacher für unabhängige Tabellen. Die akzeptierte Antwort bietet eine genaue Möglichkeit zum Zurücksetzen und Migrieren einer einzelnen Tabelle. für mehrere unabhängige Tabellen wird es funktionieren.
Sagar Gautam
14

Wenn Sie die Registerkarte für die automatische Vervollständigung verwenden

php artisan migrate --path='./database/migrations/2019_12_31_115457_create_coworking_personal_memberships_table.php'
Dawam Raja
quelle
funktioniert nicht für mich, mit zsh
digout
8

Sie müssen die Datei (en) in ein neues Verzeichnis (z. B. ausgewählt) legen und dann anwenden

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

Wenn Sie einen Rollback benötigen:

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

Hinweis:

php artisan migrate:refresh

Dadurch werden alle Migrationsdateien im Standardverzeichnis (/ database / migrations) zurückgesetzt und anschließend migriert.

Ahmad Zahabi
quelle
Sie müssen kein neues Verzeichnis erstellen. Sie können den Dateinamen direkt wie '--path = / database / migrations / fileName.php' eingeben.
Wissem SASSI
8

Sie können einen Befehl wie diesen ausführen

php artisan migrate --path=/database/migrations/2020_04_10_130703_create_test_table.php
Todesschrift
quelle
7
php artisan help migrate

Sie sehen die Option:

--path [= PATH] Der Pfad zu den auszuführenden Migrationsdateien

Übrigens können Sie wahrscheinlich den Stammordner der Datei angeben, die Sie migrieren möchten:

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

Oder Sie können bei Migrationen einen neuen Ordner erstellen und dann alle gewünschten Migrationsdateien darin migrieren:

php artisan migrate --path=/database/migrations/new_folder
manh quan nguyen
quelle
Du hast gerade ein 's' verpasst. Es sollten "Migrationen" sein! PHP
Artisan migrate
php artisan migrate --path = / database / migrations / new_folder / brauche das letzte '/'
Pasindu Jayanath
5

Ich wollte nur eine andere Lösung veröffentlichen, die meiner Meinung nach erwähnenswert ist.

  1. Suchen Sie die Zeile mit Ihrem Migrationsnamen in der Migrationstabelle und löschen Sie sie. Es sollte so aussehen: 2016_06_01_000001_create_oauth_auth_codes_table
  2. Entfernen Sie Ihre Tabelle aus der Datenbank, z. B. DROP TABLE oauth_auth_codes
  3. Führen Sie PHP Artisan Migrate aus

Es wird nur die Tabelle migriert, die Sie benötigen, und es wird nichts anderes berührt

tylik
quelle
4

Wenn Sie eine bestimmte Tabelle erstellen möchten. Sie können diesen Code verwenden. Es funktioniert für Laravel (5.x) -Versionen.

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

Löschen Sie die Tabelle und entfernen Sie ihren Datensatz aus der Migrationstabelle.

Danach führen Sie einfach die Migration erneut aus:

php artisan migrate
sskoko
quelle
3

Korrektur - Entfernen Sie den Schrägstrich vor der Datenbank

$ php artisan migrate --path=database/migrations/migration.php
TCruz
quelle
1
Nichts zu migrieren.
Zod
3

Spezifische Tabellenmigration

php artisan migrate --path=/database/migrations/fileName.php
Vishal Vaghasiya
quelle
2

Oder Sie können einfach den Namen der Migrationsdatei aus Ihrer Datenbank in der Tabelle "Migrationen" löschen und dann Folgendes ausführen: PHP Artitsan Migration

Lasha Shonia
quelle
1

Sie können versuchen, mit der Option --path = den spezifischen Unterordner zu definieren, den Sie ausführen möchten, und dort bestimmte Migrationen zu platzieren.

Alternativ müssten Sie Verweise und Tabellen aus der Datenbank und den Migrationstabellen entfernen, was nicht ideal ist: /

Chris WB
quelle
1

Wenn Sie eine andere Tabelle erstellen möchten, erstellen Sie einfach eine neue Migrationsdatei. Es wird funktionieren.

Wenn Sie eine Migration erstellen namens users_tablemit id, first_name, last_name. Sie können eine Migrationsdatei wie erstellen

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

Wenn Sie ein weiteres Feld wie "Status" ohne Migration hinzufügen möchten: Aktualisieren. Sie können eine weitere Migrationsdatei wie "add_status_filed_to_users_table" erstellen.

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

Und vergessen Sie nicht, die Rollback-Option hinzuzufügen:

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

Wenn Sie migrate with ausführen php artitsan migration, wird lediglich die neue Migrationsdatei migriert.

Wenn Sie jedoch der ersten Verwaltungsdatei (users_table) den Status "archiviert" hinzufügen und die Migration ausführen. Es ist nichts zu migrieren. Du musst rennen php artisan migrate:refresh.

Ich hoffe das hilft.

Nguyen Hoang
quelle
1

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

Folgen Sie einfach der Anweisung, um diesen Befehlsdateinamen auszuführen. Hier sollte der Name Ihrer Migrationstabelle sein. Beispiel: php artisan migrate --path = / database / migrations / 2020_02_21_101937_create_jobs_table.php

Mithun Rana
quelle
0

Sie können diesen Befehl nur in Ihrem Terminal ausführen

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

Nach der Migration sollten Sie den jeweiligen Dateinamen eingeben. Wenn sich in der Migration ein Ordner befindet, fügen Sie diesen Ordnernamen nach der Migration hinzu.

So was

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

Ich hoffe, das wird dir ein bisschen helfen. Viel Spaß beim Codieren.

Sayandeep Majumdar
quelle
-1

Zuerst sollten Sie die folgenden Befehle ausführen:

Schritt 1:

php artisan migrate:rollback

Schritt 2:

php artisan migrate

Ihre Tabelle wird wieder in der Datenbank gespeichert.

Habibur Rahman
quelle
Es wäre hilfreicher, wenn Sie jedem Schritt eine kleine Beschreibung hinzufügen würden. Dies hilft dem Benutzer zu verstehen, was tatsächlich passiert. Dies sieht aus wie ein Cheat-Code, der die Dinge auf magische Weise zum Laufen bringt, aber das Ergebnis kann in einigen Fällen katastrophal sein.
Ashwani Agarwal
Bitte lesen Sie die Frage sorgfältig durch. Die Person hat nur nach einer Tabelle gefragt. Ihre Methode setzt alle Migrationen zurück und erstellt dann alle Tabellen. Auch php artisan migration:refreshdient das gleiche.
Wajahat Hashmi