Base de données
Les plugins peuvent configurer leur propre base de données, par exemple le contenu de plugin/foo/config/database.php
est comme suit :
return [
'default' => 'mysql',
'connections' => [
'mysql' => [ // mysql est le nom de la connexion
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'base_de_données',
'username' => 'nom_utilisateur',
'password' => 'mot_de_passe',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
'admin' => [ // admin est le nom de la connexion
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'base_de_données',
'username' => 'nom_utilisateur',
'password' => 'mot_de_passe',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
],
];
La méthode d'appel est Db::connection('plugin.{plugin}.{nom_de_connexion}');
, par exemple
use support\Db;
Db::connection('plugin.foo.mysql')->table('utilisateur')->first();
Db::connection('plugin.foo.admin')->table('admin')->first();
Si vous souhaitez utiliser la base de données du projet principal, vous pouvez simplement l'utiliser, par exemple
use support\Db;
Db::table('utilisateur')->first();
// Suppose que le projet principal a également configuré une connexion admin
Db::connection('admin')->table('admin')->first();
Configurer la base de données pour un modèle
Vous pouvez créer une classe de base pour un modèle, la classe base utilise $connection
pour spécifier la connexion à la base de données du plugin, par exemple
<?php
namespace plugin\foo\app\model;
use DateTimeInterface;
use support\Model;
class Base extends Model
{
/**
* @var string
*/
protected $connection = 'plugin.foo.mysql';
}
De cette façon, tous les modèles du plugin héritent de la classe Base
et utilisent automatiquement la base de données du plugin.
Réutilisation de la configuration de la base de données
Bien entendu, vous pouvez réutiliser la configuration de la base de données du projet principal. Si vous avez intégré webman-admin, vous pouvez également réutiliser la configuration de la base de données de webman-admin, par exemple
<?php
namespace plugin\foo\app\model;
use DateTimeInterface;
use support\Model;
class Base extends Model
{
/**
* @var string
*/
protected $connection = 'plugin.admin.mysql';
}