Datenbank
Da die meisten Plugins webman-admin installieren, wird empfohlen, die Datenbankkonfiguration von webman-admin
direkt wiederzuverwenden.
Die Modell-Basisklasse verwendet plugin\admin\app\model\Base
, wodurch automatisch die Datenbankkonfiguration von webman-admin
verwendet wird.
<?php
namespace plugin\foo\app\model;
use plugin\admin\app\model\Base;
class Orders extends Base
{
/**
* Die mit dem Modell verbundene Tabelle.
*
* @var string
*/
protected $table = 'foo_orders';
/**
* Der Primärschlüssel, der mit der Tabelle verbunden ist.
*
* @var string
*/
protected $primaryKey = 'id';
}
Es ist auch möglich, die Datenbank von webman-admin
über plugin.admin.mysql
zu bedienen, zum Beispiel:
Db::connection('plugin.admin.mysql')->table('user')->first();
Eigene Datenbank verwenden
Plugins können auch ihre eigene Datenbank verwenden, z.B. den Inhalt von plugin/foo/config/database.php
wie folgt:
return [
'default' => 'mysql',
'connections' => [
'mysql' => [ // mysql ist der Verbindungsname
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'Datenbank',
'username' => 'Benutzername',
'password' => 'Passwort',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
'admin' => [ // admin ist der Verbindungsname
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'Datenbank',
'username' => 'Benutzername',
'password' => 'Passwort',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
],
];
Der Verweis erfolgt über Db::connection('plugin.{plugin}.{verbindungsname}');
, zum Beispiel:
use support\Db;
Db::connection('plugin.foo.mysql')->table('user')->first();
Db::connection('plugin.foo.admin')->table('admin')->first();
Wenn Sie die Datenbank des Hauptprojekts verwenden möchten, verwenden Sie sie einfach, z.B.:
use support\Db;
Db::table('user')->first();
// Angenommen, das Hauptprojekt hat auch eine admin-Verbindung konfiguriert
Db::connection('admin')->table('admin')->first();
Datenbank für Model konfigurieren
Wir können eine Base-Klasse für das Model erstellen, wobei die Base-Klasse $connection
verwendet, um die eigene Datenbankverbindung des Plugins anzugeben, zum Beispiel:
<?php
namespace plugin\foo\app\model;
use DateTimeInterface;
use support\Model;
class Base extends Model
{
/**
* @var string
*/
protected $connection = 'plugin.foo.mysql';
}
So verwenden alle Models im Plugin, die von Base erben, automatisch die eigene Datenbank des Plugins.
Automatisches Importieren der Datenbank
Die Ausführung von php webman app-plugin:create foo
erstellt automatisch das foo-Plugin, welches plugin/foo/api/Install.php
und plugin/foo/install.sql
enthält.
Hinweis
Wenn keine install.sql-Datei generiert wurde, versuchen Sie,webman/console
zu aktualisieren, der Befehl lautetcomposer require webman/console ^1.3.6
Importieren der Datenbank beim Installieren des Plugins
Beim Installieren des Plugins wird die Methode install
in Install.php aufgerufen, die automatisch die SQL-Anweisungen aus install.sql
importiert, um die Datenbanktabellen automatisch zu erstellen.
Der Inhalt der Datei install.sql
besteht aus den SQL-Anweisungen zum Erstellen von Datenbanktabellen sowie zur historischen Änderung der Tabellen. Beachten Sie, dass jede Anweisung mit ;
enden muss, zum Beispiel:
CREATE TABLE `foo_orders` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'Primärschlüssel',
`order_id` varchar(50) NOT NULL COMMENT 'Bestell-ID',
`user_id` int NOT NULL COMMENT 'Benutzer-ID',
`total_amount` decimal(10,2) NOT NULL COMMENT 'Zu zahlender Betrag',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='Bestellung';
CREATE TABLE `foo_goods` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'Primärschlüssel',
`name` varchar(50) NOT NULL COMMENT 'Name',
`price` int NOT NULL COMMENT 'Preis',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='Produkt';
Ändern der Datenbankverbindung
Die Ziel-Datenbank, in die install.sql
importiert wird, ist standardmäßig die Datenbank von webman-admin
. Wenn Sie in eine andere Datenbank importieren möchten, können Sie das Attribut $connection
in Install.php
ändern, zum Beispiel:
<?php
class Install
{
// Bestimmt die eigene Datenbank des Plugins
protected static $connection = 'plugin.admin.mysql';
// ...
}
Test
Führen Sie php webman app-plugin:install foo
aus, um das Plugin zu installieren, und überprüfen Sie die Datenbank, um festzustellen, dass die Tabellen foo_orders
und foo_goods
erstellt wurden.
Ändern der Tabellenstruktur beim Upgrade des Plugins
Manchmal erfordert das Upgrade eines Plugins das Erstellen neuer Tabellen oder das Ändern der Tabellenstruktur. Sie können einfach die entsprechenden Anweisungen an das Ende von install.sql
anhängen. Beachten Sie, dass jede Anweisung mit ;
enden muss, zum Beispiel, um eine foo_user
-Tabelle hinzuzufügen und der foo_orders
-Tabelle ein status
-Feld hinzuzufügen:
CREATE TABLE `foo_orders` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'Primärschlüssel',
`order_id` varchar(50) NOT NULL COMMENT 'Bestell-ID',
`user_id` int NOT NULL COMMENT 'Benutzer-ID',
`total_amount` decimal(10,2) NOT NULL COMMENT 'Zu zahlender Betrag',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='Bestellung';
CREATE TABLE `foo_goods` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'Primärschlüssel',
`name` varchar(50) NOT NULL COMMENT 'Name',
`price` int NOT NULL COMMENT 'Preis',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='Produkt';
CREATE TABLE `foo_user` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'Primärschlüssel',
`name` varchar(50) NOT NULL COMMENT 'Name'
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='Benutzer';
ALTER TABLE `foo_orders` ADD `status` tinyint NOT NULL DEFAULT 0 COMMENT 'Status';
Beim Upgrade wird die update
-Methode in Install.php aufgerufen, die ebenfalls die Anweisungen in install.sql
ausführt. Wenn neue Anweisungen vorhanden sind, werden sie ausgeführt. Bei alten Anweisungen wird übersprungen, um das Upgrade der Datenbankänderungen zu ermöglichen.
Löschen der Datenbank beim Deinstallieren des Plugins
Beim Deinstallieren des Plugins wird die Methode uninstall
in Install.php
aufgerufen. Diese analysiert automatisch, welche CREATE TABLE-Anweisungen in install.sql
vorhanden sind, und löscht automatisch diese Tabellen, um die Tabellen beim Deinstallieren des Plugins zu entfernen.
Wenn Sie beim Deinstallieren nur Ihre eigene uninstall.sql
ausführen möchten und nicht die automatische Löschoperation, müssen Sie einfach plugin/{pluginname}/uninstall.sql
erstellen. Auf diese Weise führt die uninstall
-Methode nur die Anweisungen in der Datei uninstall.sql
aus.