Datenbankmigration
Wenn Sie NexoPOS mit Modulen erweitern möchten, sollten Sie möglicherweise mit der Datenbank interagieren. Aber sofern Sie nicht die vorhandene Datenbank verwenden wollen, müssen Sie Ihre Tabellen erstellen oder vielleicht neue Spalten zu bestehenden Tabellen hinzufügen. Diese Anleitung beschreibt, wie Sie Migrationen für Ihr Modul erstellen können.
Was ist eine Migration?
Eine Migration steht für eine Datei, die während eines Upgrade-Prozesses ausgeführt wird und darauf abzielt, das Datenbankschema zu verändern. Sie ist jedoch nicht darauf beschränkt, da sie auch verwendet werden kann, um:
- Neue Berechtigungen & Rollen erstellen
- Führen Sie eine Stapeländerung für die aktuellen Einträge durch
- usw.
Beachten Sie, dass eine Migration nach ihrer Ausführung nicht erneut ausgeführt werden kann, außer NexoPOS verliert den Überblick über diese Migration. Dies kann mithilfe des Befehls „migration forget“ erreicht werden.
Migrations-Best Practices
Migrationen werden im Ordner „Migrations“ in Ihrem Modul gespeichert. Im Gegensatz zu Laravel-Migrationen gilt für diese Dateien PSR-4, und dann muss der Klassenname sehr genau mit dem Dateinamen übereinstimmen. Sie sind nicht gezwungen, Migrationen manuell zu erstellen, da Sie den Befehl verwenden können, der unten geteilt wird.
Die beste Technik besteht darin, jeder Ihrer Migrationen einen eindeutigen Namen zu geben, auch wenn die Aufgabe für dieselbe Tabelle ausgeführt wird.
In der Regel sollten Migrationen, die vorhandene Tabellen aktualisieren, mit „Update“ beginnen, z. B. „UpdateBookingTableMarch10“ oder „UpdateBookingTablePriceColumn“. In jedem Fall musst du sicherstellen, dass der Name eindeutig ist, da du möglicherweise in Zukunft eine weitere Migration für diese Tabelle erstellen musst.
Wenn Sie neue Tabellen in Ihrer Migrationsdatei erstellen möchten, kann der Dateiname mit „Create“ beginnen, zum Beispiel „CreateBookingTable“.
Erstellen einer Migration mit einem Befehl
NexoPOS wird mit einem Befehl geliefert, der Ihnen dabei hilft, eine Migration für Ihr Modul zu erstellen. Hier ist die Signatur dieses Befehls:
php artisan modules:migration {moduleNamespace}
Dabei muss {moduleNamespace} durch Ihre tatsächliche Modulkennung ersetzt werden. Direkt nachdem Sie diesen Befehl ausgeführt haben, werden Sie aufgefordert, den Namen Ihrer Migration anzugeben.
Die Eingabeaufforderung bleibt für nachfolgende Migrationen geöffnet. Geben Sie „Q“ ein, um zu beenden.
In Ihrem Migrationsverzeichnis können Sie Ihre Migrationsdatei sehen.
So erstellen Sie eine Tabelle
Da NexoPOS auf Laravel basiert, müssen Sie die Anweisungen in der Laravel-Dokumentation für Migrationen befolgen. Da die Migrationsdatei jedoch möglicherweise mehr als einmal ausgeführt wird, bitten wir Sie, eine Überprüfung durchzuführen und zu prüfen, ob :
- Die Tabelle, die Sie erstellen möchten, existiert bereits.
- Die Spalte, die Sie hinzufügen/entfernen möchten, existiert nicht.
Diese werden in derselben Dokumentation hier beschrieben.
Massenaktualisierung für vorhandene Datensätze
Wenn Sie einige Einträge in Ihrem System haben, können Sie diese nach einer Migration, die eine Struktur ändert, mithilfe ihres Modells abrufen, um eine Massenaktualisierung durchzuführen. Für zu große Einträge, die sich nicht aktualisieren lassen, sollten Sie möglicherweise in Erwägung ziehen, einen asynchronen Job zu dispatchen.
Rollen und Berechtigungen erstellen
Die Migrationen sind der perfekte Ort, um Rollen und Berechtigungen für dein Modul zu erstellen. Du kannst den Anweisungen folgen, die zum Erstellen einer Rolle und Berechtigung bereitgestellt wurden.
Was sind die „up“- und „down“-Methoden?
NexoPOS verwendet diese Methoden, um eine Änderung in der Datenbank durchzuführen (up) und rückgängig zu machen (down). Das bedeutet: Wenn Sie möchten, dass NexoPOS eine Änderung in der Datenbank vornimmt, schreiben Sie Ihren Code in die Methode „up“. Wenn Ihr Modul deinstalliert wird, führt NexoPOS für alle Ihrer Migrationen die Methode „down“ aus.
Normalerweise machen wir keine Spalten rückgängig, die zu Tabellen hinzugefügt wurden, die vom Modul erstellt wurden. Um jedoch Änderungen an externen Tabellen rückgängig zu machen, müssen Sie noch einmal prüfen, ob diese Spalte vorhanden ist.
Migrationsabhängigkeiten
Möglicherweise möchten Sie manchmal eine Migration ausführen, wenn auf Ihrem System ein anderes Modul installiert und aktiviert ist. So wird sichergestellt, dass die Modultabellen erstellt werden, falls Sie das Schema dieses Moduls ändern möchten.
Du musst lediglich eine DEPENDENCIES-Konstante für dein Modul bereitstellen, bei der es sich um ein Array mit den Modulen „namespace“ handelt.
<?php
namespace Modules\YourModule\Migrations;
use App\Classes\Schema;
use Illuminate\Database\Schema\Blueprint;
class UpdateGastroModifiersGroup
{
const DEPENDENCIES = [ 'NsGastro' ];
public function up()
{
if ( ! Schema::hasTable('nexopos_gastro_modifiers_group') ) {
Schema::table('nexopos_gastro_modifiers_group', function (Blueprint $table) {
if (! Schema::hasColumn('nexopos_gastro_modifiers_group', 'wc_product_id')) {
$table->integer('wc_product_id')->nullable();
}
});
}
}
}
In diesem Beispiel wird die Methode „up()“ nur ausgeführt, wenn das Modul „NsGastro“ (der Gastro-Modulnamespace) installiert und aktiviert ist. Beachten Sie, dass die Migration von mehreren Modulen abhängen kann.
Das bedeutet, dass das Modul „YourModule“ sich normal verhalten kann und das Schema automatisch aktualisiert, sobald Gastro installiert und aktiviert wird. So wird sichergestellt, dass das Modul sowohl mit als auch ohne die Abhängigkeiten funktioniert.
# So führen Sie Migrationen aus
Sie müssen keine Migration ausführen; NexoPOS führt die Migration automatisch durch. Jedes Mal, wenn für das Modul eine Migration durchgeführt wird, wird ein Datensatz in der Tabelle „modules_migrations“ gespeichert. Das Löschen dieses Datensatzes zwingt NexoPOS, diese Migration erneut auszuführen. Damit NexoPOS schnell bleibt, werden alle ausgeführten Migrationen zwischengespeichert, um unnötige Datenbankaufrufe zu vermeiden. Anschließend müssen Sie den Cache mit dem folgenden Befehl leeren:
php artisan cache:clear
Modulmigration rückgängig machen
Während der Entwicklung Ihres Moduls müssen Sie möglicherweise die bisher erstellte Migration zurücksetzen. Dafür verwenden Sie den folgenden Befehl:
php artisan modules:migration --forget {moduleNamespace}
Stellen Sie sicher, dass Sie „{moduleNamespace}“ durch den Modulnamespace ersetzen, für den Sie die Migrationen zurücksetzen möchten.