Base de données
Étant donné que la plupart des plugins installeront webman-admin, il est recommandé de réutiliser directement la configuration de la base de données de webman-admin.
La classe de base du modèle utilisant plugin\admin\app\model\Base utilisera automatiquement la configuration de la base de données de webman-admin.
<?php
namespace plugin\foo\app\model;
use plugin\admin\app\model\Base;
class Orders extends Base
{
/**
* La table associée au modèle.
*
* @var string
*/
protected $table = 'foo_orders';
/**
* La clé primaire associée à la table.
*
* @var string
*/
protected $primaryKey = 'id';
}
Il est également possible d'opérer la base de données de webman-admin via plugin.admin.mysql, par exemple
Db::connection('plugin.admin.mysql')->table('user')->first();
Utiliser sa propre base de données
Le plugin peut également choisir d'utiliser sa propre base de données, par exemple, le contenu de plugin/foo/config/database.php est le suivant
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_d_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_d_utilisateur',
'password' => 'mot_de_passe',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
],
];
La façon de faire référence est Db::connection('plugin.{plugin}.{nom_de_connexion}');, par exemple
use support\Db;
Db::connection('plugin.foo.mysql')->table('user')->first();
Db::connection('plugin.foo.admin')->table('admin')->first();
Si vous souhaitez utiliser la base de données du projet principal, il suffit de l'utiliser directement, par exemple
use support\Db;
Db::table('user')->first();
// Supposons que le projet principal a également configuré une connexion admin
Db::connection('admin')->table('admin')->first();
Configurer la base de données pour le modèle
Nous pouvons créer une classe Base pour le modèle, la classe Base spécifiant la connexion de la base de données de son propre plugin avec $connection, par exemple
<?php
namespace plugin\foo\app\model;
use DateTimeInterface;
use support\Model;
class Base extends Model
{
/**
* @var string
*/
protected $connection = 'plugin.foo.mysql';
}
Ainsi, tous les modèles dans le plugin qui héritent de Base utiliseront automatiquement la base de données de leur propre plugin.
Importation automatique de la base de données
Exécuter php webman app-plugin:create foo créera automatiquement le plugin foo, qui contient plugin/foo/api/Install.php et plugin/foo/install.sql.
Astuce
Si le fichier install.sql n'est pas généré, veuillez essayer de mettre à jourwebman/consoleavec la commandecomposer require webman/console ^1.3.6
Importation de la base de données lors de l'installation du plugin
Lors de l'installation du plugin, la méthode install dans Install.php sera exécutée, cette méthode importera automatiquement les instructions SQL dans install.sql, réalisant ainsi l'importation automatique des tables de la base de données.
Le contenu du fichier install.sql est la création de tables dans la base de données ainsi que des instructions SQL pour les modifications historiques des tables, notez que chaque instruction doit se terminer par ;, par exemple
CREATE TABLE `foo_orders` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'clé primaire',
`order_id` varchar(50) NOT NULL COMMENT 'id de la commande',
`user_id` int NOT NULL COMMENT 'id de l'utilisateur',
`total_amount` decimal(10,2) NOT NULL COMMENT 'montant à payer',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='commande';
CREATE TABLE `foo_goods` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'clé primaire',
`name` varchar(50) NOT NULL COMMENT 'nom',
`price` int NOT NULL COMMENT 'prix',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='produit';
Modifier la connexion à la base de données
La base de données cible par défaut pour l'importation de install.sql est la base de données de webman-admin. Si vous souhaitez l'importer dans une autre base de données, vous pouvez modifier l'attribut $connection dans Install.php, par exemple
<?php
class Install
{
// Spécifiez la base de données de votre propre plugin
protected static $connection = 'plugin.admin.mysql';
// ...
}
Test
Exécutez php webman app-plugin:install foo pour installer le plugin, puis vérifiez la base de données ; vous verrez que les tables foo_orders et foo_goods ont déjà été créées.
Modification de la structure des tables lors de la mise à niveau du plugin
Parfois, une mise à niveau du plugin nécessite de créer de nouvelles tables ou de modifier la structure des tables. Vous pouvez simplement ajouter les instructions correspondantes après install.sql, en notant que chaque instruction doit se terminer par ;, par exemple l'ajout d'une table foo_user et l'ajout d'un champ status à la table foo_orders
CREATE TABLE `foo_orders` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'clé primaire',
`order_id` varchar(50) NOT NULL COMMENT 'id de la commande',
`user_id` int NOT NULL COMMENT 'id de l'utilisateur',
`total_amount` decimal(10,2) NOT NULL COMMENT 'montant à payer',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='commande';
CREATE TABLE `foo_goods` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'clé primaire',
`name` varchar(50) NOT NULL COMMENT 'nom',
`price` int NOT NULL COMMENT 'prix',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='produit';
CREATE TABLE `foo_user` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'clé primaire',
`name` varchar(50) NOT NULL COMMENT 'nom'
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='utilisateur';
ALTER TABLE `foo_orders` ADD `status` tinyint NOT NULL DEFAULT 0 COMMENT 'état';
Lors de la mise à niveau, la méthode update dans Install.php sera exécutée ; cette méthode exécutera également les instructions dans install.sql. Les nouvelles instructions seront exécutées, tandis que les anciennes instructions seront ignorées, permettant ainsi d'appliquer les modifications à la base de données lors de la mise à niveau.
Supprimer la base de données lors de la désinstallation du plugin
Lors de la désinstallation du plugin, la méthode uninstall dans Install.php sera appelée, elle analysera automatiquement les instructions de création de tables présentes dans install.sql et supprimera automatiquement ces tables, atteignant ainsi l'objectif de supprimer les tables de la base de données lors de la désinstallation du plugin.
Si vous souhaitez n'exécuter que votre propre uninstall.sql lors de la désinstallation et éviter l'opération automatique de suppression des tables, il suffit de créer un fichier plugin/nom_du_plugin/uninstall.sql. Ainsi, la méthode uninstall n'exécutera que les instructions présentes dans le fichier uninstall.sql.