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