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/console
avec 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
.