Suche…


Migrationen

Um Ihre Datenbank in Laravel zu steuern, verwenden Sie Migrationen. Migration mit Handwerker erstellen:

php artisan make:migration create_first_table --create=first_table

Dadurch wird die Klasse CreateFirstTable generiert. Innerhalb der up-Methode können Sie Ihre Spalten erstellen:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateFirstTable extends Migration
{
    public function up()
    {
        Schema::create('first_table', function (Blueprint $table) {
            $table->increments('id');
            $table->string('first_string_column_name');
            $table->integer('secont_integer_column_name');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::drop('first_table');
    }
} 

Um alle Migrationsklassen auszuführen, können Sie am Ende den Befehl handwerklich ausführen:

php artisan migrate

Dadurch werden Ihre Tabellen und Spalten in Ihrer Datenbank erstellt. Andere nützliche Migrationsbefehle sind:

  • php artisan migrate:rollback - Rollback der letzten Datenbankmigration
  • php artisan migrate:reset - Rollback aller Datenbankmigrationen
  • php artisan migrate:refresh - Alle Migrationen zurücksetzen und erneut ausführen
  • php artisan migrate:status - Zeigt den Status jeder Migration an

Vorhandene Tabellen ändern

Manchmal müssen Sie Ihre vorhandene Tabellenstruktur ändern, z. B. das renaming/deleting Spalten. Was Sie erreichen können, indem Sie eine neue Migration erstellen. In der up Methode Ihrer Migration.

//Renaming Column.

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->renameColumn('email', 'username');
    });
}

Im obigen Beispiel wird die email column der users table in username . Während der Code unten fällt eine Spalte username von users Tabelle.

Improtant: Für Spalten modifizieren müssen Sie hinzufügen doctrine/dbal Abhängigkeit Projekts composer.json Datei und starten composer update , um Änderungen.

//Droping Column
public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->dropColumn('username');
    });
}

Die Migrationsdateien

Migrationen in einer Laravel 5-Anwendung befinden sich im database/migrations . Ihre Dateinamen entsprechen einem bestimmten Format:

<year>_<month>_<day>_<hour><minute><second>_<name>.php

Eine Migrationsdatei sollte eine Schemaaktualisierung darstellen, um ein bestimmtes Problem zu lösen. Zum Beispiel:

2016_07_21_134310_add_last_logged_in_to_users_table.php

Datenbankmigrationen werden in chronologischer Reihenfolge gespeichert, sodass Laravel weiß, in welcher Reihenfolge sie ausgeführt werden sollen. Laravel führt immer Migrationen vom ältesten zum neuesten durch.

Migrationsdateien generieren

Das Erstellen einer neuen Migrationsdatei mit dem korrekten Dateinamen jedes Mal, wenn Sie Ihr Schema ändern müssen, wäre eine Aufgabe. Glücklicherweise kann der artisan Befehl von Laravel die Migration für Sie generieren:

php artisan make:migration add_last_logged_in_to_users_table

Sie können auch die --table und --create mit dem obigen Befehl verwenden. Diese sind optional und dienen nur der Bequemlichkeit. Sie fügen den entsprechenden Code für die Druckspeicher in die Migrationsdatei ein.

php artisan make:migration add_last_logged_in_to_users_table --table=users

php artisan make:migration create_logs_table --create=logs

Sie können mit der Option --path einen benutzerdefinierten Ausgabepfad für die generierte Migration --path . Der Pfad ist relativ zum Basispfad der Anwendung.

php artisan make:migration --path=app/Modules/User/Migrations

Innerhalb einer Datenbankmigration

Jede Migration sollte eine up() Methode und eine down() Methode haben. Der Zweck der up() -Methode besteht darin, die erforderlichen Operationen auszuführen, um das Datenbankschema in seinen neuen Zustand zu versetzen, und der Zweck der down() -Methode ist es, alle von der up() -Methode ausgeführten Operationen rückgängig zu machen. Um sicherzustellen, dass die down() -Methode Ihre Vorgänge ordnungsgemäß rückgängig macht, ist es äußerst wichtig, dass Sie Änderungen an Datenbankschemas rückgängig machen können.

Eine Beispielmigrationsdatei kann wie folgt aussehen:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddLastLoggedInToUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dateTime('last_logged_in')->nullable();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('last_logged_in');
        });
    }
}

Bei der Ausführung dieser Migration generiert Laravel die folgende SQL, die für Ihre Datenbank ausgeführt werden kann:

ALTER TABLE `users` ADD `last_logged_in` DATETIME NULL

Migrationen ausführen

Nach dem Ausführen der Migration werden die Vorgänge auf Ihre Datenbank angewendet.

php artisan migrate

Wenn alles gut lief, wird eine Ausgabe ähnlich der folgenden angezeigt:

Migrated: 2016_07_21_134310_add_last_logged_in_to_users_table

Laravel ist klug genug, wenn Sie Migrationen in der Produktionsumgebung ausführen. Wenn Sie feststellen, dass Sie eine destruktive Migration durchführen (z. B. eine, die eine Spalte aus einer Tabelle entfernt), werden Sie vom php artisan migrate Befehl zur Bestätigung aufgefordert. In Umgebungen mit kontinuierlicher Lieferung ist dies möglicherweise nicht erwünscht. Verwenden --force in diesem Fall das Flag --force , um die Bestätigung zu überspringen:

php artisan migrate --force

Wenn Sie nur Migrationen ausgeführt haben, sind Sie möglicherweise verwirrt, wenn eine migrations in Ihrer Datenbank vorhanden ist. Diese Tabelle verwendet Laravel, um zu verfolgen, welche Migrationen bereits ausgeführt wurden. Wenn Sie den migrate ausgeben, ermittelt Laravel, welche Migrationen noch ausgeführt werden müssen, führt sie dann in chronologischer Reihenfolge aus und aktualisiert die migrations entsprechend.

Sie sollten die migrations niemals manuell bearbeiten, es sei denn, Sie wissen absolut, was Sie tun. Es ist sehr einfach, versehentlich Ihre Datenbank in einem fehlerhaften Zustand zu lassen, in dem Ihre Migrationen fehlschlagen.

Migrationen rückgängig machen

Wenn Sie die letzte Migration, dh den letzten Vorgang, rückgängig machen möchten, können Sie den awesome rollback Befehl verwenden. Denken Sie jedoch daran, dass dieser Befehl nur die letzte Migration rückgängig macht, die möglicherweise mehrere Migrationsdateien enthält

php artisan migrate:rollback

Wenn Sie alle Ihre Anwendungsmigrationen rückgängig machen möchten, können Sie den folgenden Befehl verwenden

php artisan migrate:reset 

Wenn Sie wie ich faul sind und mit einem Befehl zurückrollen und migrieren möchten, können Sie diesen Befehl verwenden

php artisan migrate:refresh
php artisan migrate:refresh --seed

Sie können auch die Anzahl der Schritte angeben, die mit der Option step . So wird 1 Schritt zurückgesetzt.

php artisan migrate:rollback --step=1


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow