Laravel中Hyn多租户包(v5.9)连接逻辑重写方法咨询
重写Hyn多租户v5.9数据库连接参数的方法
针对Laravel项目中使用Hyn多租户v5.9时需要自定义独立数据库连接参数的场景,绝对不要直接修改包内的Connection.php源码(composer升级会覆盖修改内容),推荐用「继承重写+配置替换」的方式实现,具体步骤如下:
1. 创建自定义Connection类
在项目中新建一个继承自Hyn原Connection类的自定义类,重写包含目标代码段的方法:
namespace App\Database\Connections; use Hyn\Tenancy\Database\Connection as BaseConnection; use Hyn\Tenancy\Contracts\Website; class CustomTenantConnection extends BaseConnection { /** * 重写租户数据库连接配置生成逻辑 */ protected function cloneConfigurationForWebsite(Website $website) { // 先调用父类方法获取基础配置 $clone = parent::cloneConfigurationForWebsite($website); // 针对独立数据库模式重写参数 switch ($this->mode()) { case static::DIVISION_MODE_SEPARATE_DATABASE: // 这里替换成你的自定义逻辑,示例如下: // 从网站meta字段读取自定义的数据库用户名、库名、密码 $clone['username'] = $website->meta->get('db_username', $website->uuid); $clone['database'] = $website->meta->get('db_database', $website->uuid); $clone['password'] = $website->meta->get('db_password', $this->passwordGenerator->generate($website)); break; // 其他模式保持父类原有逻辑 default: break; } return $clone; } }
注:如果Hyn v5.9中包含目标代码段的方法不是
cloneConfigurationForWebsite,可以直接查看vendor/hyn/multi-tenant/src/Database/Connection.php源码,找到对应方法后再重写。
2. 配置包使用自定义类
修改项目根目录下的config/tenancy.php配置文件,将connection项指定为你的自定义类命名空间:
// config/tenancy.php return [ // ...其他配置 'connection' => App\Database\Connections\CustomTenantConnection::class, ];
这样Hyn多租户包就会优先使用你的自定义Connection类,执行你重写的连接参数逻辑,同时保留原包的其他功能不受影响。
内容的提问来源于stack exchange,提问作者Zain ul Abideen
相关产品推荐
相关产品推荐

