sommer / wn-multidb-plugin
WinterCMS 管理多个数据库的插件
This package is auto-updated.
Last update: 2024-09-20 05:52:47 UTC
README
WinterCMS 插件,用于在不同的数据库中创建 SaaS 应用程序,简化了多个客户的管理。为了开发此插件,我重用了 WinterCMS 本身的一些类,试图创建尽可能简单的代码。
重要 此插件仍在测试和开发阶段,请自行承担风险使用。
用法
安装
您可以通过 composer 安装此插件。
使用 Composer
在项目根目录下执行以下命令。
composer require sommer/wn-multidb-plugin
多数据库设置 - 后端
要使用多数据库,您需要按照以下步骤操作。
重要 必须有一个用户在数据库中,该用户可以读取、编辑和更新数据,以及创建新的数据库。
配置 .env
这是可选的,但如果您想要配置来自租户的另一个连接的数据,您可以将 Multidb 放在 .env 中。如果不填写任何内容,它将自动假设来自您在 DB_* 中使用的主要数据库服务器的访问数据。
MULTIDB_CONNECTION=multidb
MULTIDB_HOST=127.0.0.1
MULTIDB_PORT=3306
MULTIDB_DATABASE=my_base
MULTIDB_USERNAME=root
MULTIDB_PASSWORD=
多数据库插件
首先导航到 设置 -> 多数据库 -> 插件设置
,在此处您可以配置数据库可能具有的前缀,配置每个数据库的名称,还可以选择将哪些插件复制到新创建的实例。
保存更改以更新数据
在 PHP 代码中使用
在完成上述配置后,需要编辑插件的模型。
Trait UsesTenantConnection
此特质负责管理将保存到数据库中的数据。将需要将以下特质添加到所有具有复制数据库的模型中,例如以下示例
class Product extends Model { use \Sommer\Multidb\Traits\UsesTenantConnection; ... }
Trait UsesMainConnection
此特质允许您将主数据库中的表与子数据库相关联,例如,您有一个客户插件,此插件使用 UsesTenantConnection 特质,但是您有一个核心插件,它有一个国家模型,此插件您没有复制,但您需要将客户表中的 country_id
属性与国家表相关联,在这种情况下会有错误,因为 MultiDB 会临时更改连接,因此为了避免问题,您需要在您的模型 Country 中添加以下特质。
class Product extends Model { use \Sommer\Multidb\Traits\UsesMainConnection; ... }
行为
TenantSelectionBehavior
将 TenantSelectionBehavior 类添加到控制器中,将允许用户在选择访问此控制器(如果他们之前没有选择)后选择一个租户。在此点,此行为在用户图像旁边添加了一个按钮到导航菜单,允许他们更改选择的租户。
class Summaries extends Controller { /** * @var array */ public $implement = [ 'Backend\Behaviors\ListController', 'Backend\Behaviors\FormController', 'Sommer\MultiDB\Behaviors\TenantSelectionBehavior', // <-- add this line ]; }
模型辅助工具
文件
如果您想在新的数据库中保存文件,您需要使用模型 Sommer\Multidb\Models\File
,例如使用
class Product extends Model { use \Sommer\Multidb\Traits\UsesTenantConnection; ... public $attachMany = [ 'images' => [ 'Sommer\Multidb\Models\File', 'softDelete' => true, ], ]; ... }