2016-07-08 11 views
0

ich eine vorhandene Spalte erfolgreich habe umbenannt zuvor in einer anderen Migration mit der folgenden Codezeile erstellt:Laravel Migration Nutzung vorhandener Spalte umbenennen und dann php Handwerkers migrate ausführen: refresh erfolgreich

$table->renameColumn('custom_paper_note', 'custom_primary_paper_note'); 

, aber jetzt wenn ich php artisan migrate:refresh laufen bekomme ich folgende Fehler:

[Illuminate\Database\QueryException] 
    SQLSTATE[42000]: Syntax error or access violation: 1091 Can't DROP 'custom_paper_note'; check that column/key exists (SQL: alter table `line_items` drop `custom_paper_note`) 

und

[PDOException] 
    SQLSTATE[42000]: Syntax error or access violation: 1091 Can't DROP 'custom_paper_note'; check that column/key exists 

was für mich sinnvoll ist, weil ich die Spalte umbenannt habe und sie jetzt während der Migration nicht löschen kann: refresh process. Ich verstehe jedoch nicht, wie ich diesen Fehler beheben kann.

Danke für Ihre Hilfe.

+0

Können Sie bitte beide Migrationen hier mit Auf- und Ab-Funktionen anzeigen. –

+0

Stellen Sie sicher, dass es in der neuen Migration keine 'drop'-Methode gibt, die Sie 'renameColumn' erstellen müssen. Meine Vermutung ist, du tust es. –

+0

Haben Sie "doctrine/dbal" zu Ihrem 'composer.json' hinzugefügt? – Scopey

Antwort

1

In der gleichen Migrationsdatei, in der down() Funktion, erklärt die Umkehrung des Umbenennungs:

Schema::table('table', function($table){ 
    $table->renameColumn('custom_primary_paper_note', 'custom_paper_note'); 
}); 

Auf diese Weise, wenn Sie es nach unten bringen, ist es die Spalte in den entsprechenden Spalte Namen wird umbenannt, so dass es ist abwärtskompatibel.

+0

Vielen Dank! Du bist ein Genie :) – user3089840

1

Sieht so aus, als hätten Sie den Umbenennungsvorgang bereits ausgeführt und den alten Namen nicht finden können.

Das Hinzufügen einer if-Bedingung, die das Vorhandensein einer Spalte vor der Ausführung dieser Migrationslinie prüft, könnte nützlich sein.

+0

Danke für die Antwort. Leider kann ich die Methode dropIfExists() nicht verwenden, da ich in dieser Situation eine vorherige Migrationsdatei ändern müsste. Es war jedoch eine gute Idee, wenn ich die vorherige Migration ändern konnte. – user3089840