2012-11-21 1 views
16

Ich richte eine neue App mit Laravel (Laravel 4) ein und habe einige Probleme beim Einrichten der Datenbank über Migrationen.Wie führe ich Migrationen für eine bestimmte Umgebung in Laravel durch?

Ich habe eine Migrationsdatei mit:

artisan migrate:make --table="jobs" --create jobs 

, die eine Datei in der Datenbank/Migrationen erstellt, wie erwartet, ich habe einige Mods dazu und ging es um Feuer mit

artisan migrate --env=local 

aber ich bin immer die Antwort von "Nothing to migrate"

Wenn ich ohne --env=local laufen versuchen, verwendet es die database.php in der Config-Ordner (nicht in der lokalen/staging/production folder), die wir nicht verwenden möchten, da es nicht umgebungsspezifisch ist.

Mein erster Gedanke war OK, vielleicht muss ich das env-Flag auf den Aufruf setzen, also habe ich das versucht, aber ein Fehler, der besagt, dass es die Migrationsdatei nicht erstellen konnte. Dann dachte ich, es macht keinen Sinn, env-basierte Migrationen zu machen ... sie sollten generisch erstellt werden und einfach auf einer env-Basis laufen, so dass am Ende alle Umgebungen die gleichen Migrationsskripte verwenden.

Also bin ich ein bisschen stecken jetzt, wo man, um von hier

Antwort

21

Sie müssen die Umgebung vor dem Migrate Befehl angeben.

artisan --env=local migrate 

Lauf artisan help zeigt Ihnen das Format, in dem es folgen Befehle.

artisan help 

Usage: 
    [options] command [arguments] 
+0

traurig, hatte dies keinen Einfluss ... immer noch die 'Nichts bekommen migrieren "Nachricht – duellsy

+0

Nun, nach der Hilfe, wie Sie die Optionen angeben. Sehen Sie sich "Handwerkerhilfe" an und Sie werden sehen, dass es im Format "[Optionen] Befehl [Argumente]" ist. Mein Rat ist jetzt, sicherzustellen, dass alle Umgebungen korrekt eingerichtet sind. Ich habe es einfach überprüft und es funktioniert gut für mich. Du verpasst also etwas anderes. –

+0

Das funktioniert nicht. – gandra404

1

Wenn Sie eine Migration nach dem Ausführen ändern, müssen Sie zuerst die Migration zurücksetzen.

php artisan migrate:rollback 

Führen Sie das weiter, bis die Migration, die Sie geändert haben, zurückgesetzt wird. Alternativ können Sie Ihr gesamtes Schema mit

php artisan migrate:reset 

zurückgesetzt Aber Sie werden sie dann auf dem neuesten Stand zu bringen, müssen Sie Ihre Migrationen wie normalen nennen.

php artisan migrate 

Schließlich können Sie zurückgesetzt und dann wandern durch

Aufruf
php artisan rebuild 

Beachten Sie auch, dass es in der Regel eine schlechte Praxis ist Ihre Migrationen zu ändern, nachdem sie gemacht wurden, es sei denn, man buchstäblich nur es geschafft. Sobald es bereitgestellt wird, sollten Sie es nicht ändern und stattdessen eine neue Migrationsdatei erstellen.

Hoffe, das hilft.

Edit: Ich habe irgendwie den Laravel 4 Indikator verpasst. Die meisten dieser Befehle funktionieren immer noch, glaube ich, aber Sie müssen möglicherweise anpassen.

+0

Entschuldigung, als ich "make mods" sagte, meinte ich nur, dass ich die Migrationsdatei geöffnet habe, die gerade generiert wurde, und in meinem Migrationscode hinzugefügt wurde. Ich habe eine bereits durchgeführte Migration nicht bearbeitet. Dies ist die allererste Migration für dieses Projekt – duellsy

+0

Es ist auch möglich, Migrationen in einem Kommando abzubrechen und neu zu erstellen, indem php artisan migrate: refresh verwendet wird – Atheist

3

Gelöst.

Lösung war einfach die lokale/database.php (oder Produktion/Datenbank.php, etc.), um sicherzustellen, dass der Migrationspfad Variable auf die Position zeigt, die migrate:make wird die Migration von Dateien erstellen, ändern Sie einfach

'application' => __DIR__.'/../database/migrations', 

zu

'application' => DIR.'/../../database/migrations', 
0

mir eine Lösung migrate herausgefunden zu laufen verschiedene Datenbanken. Grundsätzlich funktioniert der Befehl artisan migrate --env=local nicht. Aber wir können eine neue Verbindungszeichenfolge in config\database.php definieren. Zum Beispiel:

<?php 
    'mysql_testing' => [ 
     'driver' => 'mysql', 
     'host'  => env('DB_TESTING_HOST'), 
     'database' => env('DB_TESTING_DATABASE'), 
     'username' => env('DB_TESTING_USERNAME'), 
     'password' => env('DB_TESTING_PASSWORD'), 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => 'prefix_', 
    ], 

Und die --database angeben, wenn wir artisan migrate wie folgt ausführen:

php artisan migrate --database=mysql_testing 

this helps :)

Verwandte Themen