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 lautet composer 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.