Database
Poiché la maggior parte dei plugin installerà webman-admin, è consigliabile riutilizzare la configurazione del database di webman-admin
.
Utilizzando il modello di base plugin\admin\app\model\Base
, verrà automaticamente utilizzata la configurazione del database di webman-admin
.
<?php
namespace plugin\foo\app\model;
use plugin\admin\app\model\Base;
class Orders extends Base
{
/**
* La tabella associata al modello.
*
* @var string
*/
protected $table = 'foo_orders';
/**
* La chiave primaria associata alla tabella.
*
* @var string
*/
protected $primaryKey = 'id';
}
È possibile anche operare sul database di webman-admin
tramite plugin.admin.mysql
, come ad esempio
Db::connection('plugin.admin.mysql')->table('user')->first();
Utilizzare il proprio database
I plugin possono anche scegliere di utilizzare il proprio database, ad esempio il contenuto di plugin/foo/config/database.php
è il seguente:
return [
'default' => 'mysql',
'connections' => [
'mysql' => [ // mysql è il nome della connessione
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => '数据库',
'username' => '用户名',
'password' => '密码',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
'admin' => [ // admin è il nome della connessione
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => '数据库',
'username' => '用户名',
'password' => '密码',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
],
];
Il modo di riferimento è Db::connection('plugin.{plugin}.{nome_connessione}');
, ad esempio
use support\Db;
Db::connection('plugin.foo.mysql')->table('user')->first();
Db::connection('plugin.foo.admin')->table('admin')->first();
Se si desidera utilizzare il database del progetto principale, basta utilizzare il seguente comando:
use support\Db;
Db::table('user')->first();
// supponendo che il progetto principale abbia anche configurato una connessione admin
Db::connection('admin')->table('admin')->first();
Configurazione del database per il Model
Possiamo creare una classe Base per il Model, dove Base
utilizza $connection
per specificare la connessione al database del plugin, ad esempio:
<?php
namespace plugin\foo\app\model;
use DateTimeInterface;
use support\Model;
class Base extends Model
{
/**
* @var string
*/
protected $connection = 'plugin.foo.mysql';
}
In questo modo, tutti i Model all'interno del plugin che ereditano da Base utilizzeranno automaticamente il proprio database.
Importazione automatica del database
Eseguendo php webman app-plugin:create foo
, verrà creato automaticamente il plugin foo, che contiene plugin/foo/api/Install.php
e plugin/foo/install.sql
.
Suggerimento
Se non viene generato il file install.sql, provare ad aggiornarewebman/console
, il comando ècomposer require webman/console ^1.3.6
Importazione del database durante l'installazione del plugin
Durante l'installazione del plugin verrà eseguito il metodo install
di Install.php, il quale importerà automaticamente le istruzioni SQL presenti in install.sql
, permettendo l'importazione automatica delle tabelle del database.
Il contenuto del file install.sql
è la creazione delle tabelle del database e le dichiarazioni SQL per le modifiche storiche alle tabelle. È importante notare che ogni istruzione deve terminare con ;
, ad esempio:
CREATE TABLE `foo_orders` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'Chiave primaria',
`order_id` varchar(50) NOT NULL COMMENT 'ID ordine',
`user_id` int NOT NULL COMMENT 'ID utente',
`total_amount` decimal(10,2) NOT NULL COMMENT 'Importo da pagare',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='Ordini';
CREATE TABLE `foo_goods` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'Chiave primaria',
`name` varchar(50) NOT NULL COMMENT 'Nome',
`price` int NOT NULL COMMENT 'Prezzo',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='Prodotti';
Modifica della connessione al database
Il database di destinazione importato tramite install.sql
è predefinito al database di webman-admin
. Se si desidera importare in un altro database, è possibile modificare l'attributo $connection
in Install.php
, ad esempio:
<?php
class Install
{
// Specifica il database del plugin
protected static $connection = 'plugin.admin.mysql';
// ...
}
Test
Eseguire php webman app-plugin:install foo
per installare il plugin, quindi controllare il database per verificare che le tabelle foo_orders
e foo_goods
siano già state create.
Modifica della struttura delle tabelle durante l'aggiornamento del plugin
A volte, durante l'aggiornamento di un plugin, è necessario creare nuove tabelle o modificare la struttura delle tabelle esistenti; è possibile aggiungere direttamente le istruzioni corrispondenti alla fine di install.sql
. È importante notare che ogni istruzione deve terminare con ;
, ad esempio, per aggiungere una tabella foo_user
e un campo status
alla tabella foo_orders
:
CREATE TABLE `foo_orders` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'Chiave primaria',
`order_id` varchar(50) NOT NULL COMMENT 'ID ordine',
`user_id` int NOT NULL COMMENT 'ID utente',
`total_amount` decimal(10,2) NOT NULL COMMENT 'Importo da pagare',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='Ordini';
CREATE TABLE `foo_goods` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'Chiave primaria',
`name` varchar(50) NOT NULL COMMENT 'Nome',
`price` int NOT NULL COMMENT 'Prezzo',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='Prodotti';
CREATE TABLE `foo_user` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'Chiave primaria',
`name` varchar(50) NOT NULL COMMENT 'Nome'
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='Utente';
ALTER TABLE `foo_orders` ADD `status` tinyint NOT NULL DEFAULT 0 COMMENT 'Stato';
Durante l'aggiornamento, verrà eseguito il metodo update
in Install.php, che eseguirà anch'esso le istruzioni presenti in install.sql
. Se ci sono istruzioni nuove, verranno eseguite, mentre le istruzioni vecchie verranno saltate, permettendo modifiche al database durante l'aggiornamento.
Eliminazione del database durante la disinstallazione del plugin
Durante la disinstallazione del plugin, verrà chiamato il metodo uninstall
di Install.php, il quale analizzerà automaticamente le istruzioni di creazione delle tabelle presenti in install.sql
e rimuoverà automaticamente queste tabelle, consentendo di eliminare le tabelle del database durante la disinstallazione del plugin.
Se si desidera che durante la disinstallazione venga eseguito solo il proprio uninstall.sql
, senza l'operazione automatica di eliminazione delle tabelle, è sufficiente creare plugin/插件名/uninstall.sql
, in modo che il metodo uninstall
esegua solo le istruzioni presenti nel file uninstall.sql
.