Datenbank
Plugins können ihre eigene Datenbank konfigurieren, z. B. der Inhalt von plugin/foo/config/database.php
:
return [
'default' => 'mysql',
'connections' => [
'mysql' => [ // mysql ist der Verbindungsnamen
'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 Verbindungsnamen
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'Datenbank',
'username' => 'Benutzername',
'password' => 'Passwort',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
],
];
Die Verwendung erfolgt über Db::connection('plugin.{Plugin}.{Verbindungsnamen}');
, z. B.
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 nutzen möchten, verwenden Sie sie direkt, z. B.
use support\Db;
Db::table('user')->first();
// Angenommen, das Hauptprojekt hat auch eine Admin-Verbindung konfiguriert
Db::connection('admin')->table('admin')->first();
Konfiguration der Datenbank für Models
Wir können eine Base-Klasse für das Model erstellen, in der die Variable $connection
auf die Verbindung der Plugin-Datenbank gesetzt wird, z. B.
<?php
namespace plugin\foo\app\model;
use DateTimeInterface;
use support\Model;
class Base extends Model
{
/**
* @var string
*/
protected $connection = 'plugin.foo.mysql';
}
Auf diese Weise erben alle Models im Plugin automatisch von Base und verwenden somit automatisch die Datenbank des Plugins.
Wiederverwendung der Datenbankkonfiguration
Natürlich können wir die Datenbankkonfiguration des Hauptprojekts wiederverwenden. Wenn Sie beispielsweise webman-admin integriert haben, können Sie auch die Datenbankkonfiguration von webman-admin wiederverwenden, z. B.
<?php
namespace plugin\foo\app\model;
use DateTimeInterface;
use support\Model;
class Base extends Model
{
/**
* @var string
*/
protected $connection = 'plugin.admin.mysql';
}