Cơ sở dữ liệu
Các plugin có thể cấu hình cơ sở dữ liệu của chính mình, ví dụ như nội dung của plugin/foo/config/database.php
như sau
return [
'default' => 'mysql',
'connections' => [
'mysql' => [ // mysql là tên kết nối
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'tên_cơ_sở_dữ_liệu',
'username' => 'tên_người_dùng',
'password' => 'mật_khẩu',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
'admin' => [ // admin là tên kết nối
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'tên_cơ_sở_dữ_liệu',
'username' => 'tên_người_dùng',
'password' => 'mật_khẩu',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
],
];
Cách tham chiếu là Db::connection('plugin.{tên_plugin}.{tên_kết_nối}');
, ví dụ
use support\Db;
Db::connection('plugin.foo.mysql')->table('user')->first();
Db::connection('plugin.foo.admin')->table('admin')->first();
Nếu muốn sử dụng cơ sở dữ liệu của dự án chính, chỉ cần sử dụng như sau, ví dụ
use support\Db;
Db::table('user')->first();
// Giả sử dự án chính còn cấu hình một kết nối admin
Db::connection('admin')->table('admin')->first();
Cấu hình cơ sở dữ liệu cho Model
Chúng ta có thể tạo một lớp Base cho Model, lớp Base sử dụng $connection
để chỉ định kết nối cơ sở dữ liệu riêng của plugin, ví dụ
<?php
namespace plugin\foo\app\model;
use DateTimeInterface;
use support\Model;
class Base extends Model
{
/**
* @var string
*/
protected $connection = 'plugin.foo.mysql';
}
Như vậy, tất cả Model trong plugin khi kế thừa từ Base sẽ tự động sử dụng cơ sở dữ liệu riêng của plugin.
Tái sử dụng cấu hình cơ sở dữ liệu
Tất nhiên, chúng ta có thể tái sử dụng cấu hình cơ sở dữ liệu của dự án chính, nếu đã tích hợp webman-admin, cũng có thể tái sử dụng cấu hình cơ sở dữ liệu của webman-admin, ví dụ
<?php
namespace plugin\foo\app\model;
use DateTimeInterface;
use support\Model;
class Base extends Model
{
/**
* @var string
*/
protected $connection = 'plugin.admin.mysql';
}