求实现思路

客户希望把现有系统改造为多租户系统,每个租户有各自的数据库和二级域名
用户登录不同域名使用对应的数据库已经解决。
现有问题是,当租户注册完成后,我创建了数据库并且,根据租户填写的信息在更新响应的表,比如用户名,密码,城市,地址等,
现在的做法是创建一个command,然后注册成功后再调用这个命令

部分代码

$signature = 'tenant:seed {name} {password} {email} {verify_token}';
    public function handle()
    {
        // https://stackoverflow.com/questions/21307464/can-i-import-a-mysql-dump-to-a-laravel-migration
        $companyName = $this->argument('name');
        $email = $this->argument('email');
        $verifyToken = $this->argument('verify_token');
        $dbname = config('tenant.db_prefix') . $companyName;
        $cryPassword = bcrypt($this->argument('password'));
        DB::unprepared("CREATE DATABASE `$dbname` DEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;");
        DB::unprepared("USE $dbname;");
        DB::unprepared(file_get_contents(storage_path('sql/tenant20200928.sql')));
        DB::unprepared("update Employee set empName='$companyName', email='$email', empEmail='$email', empPassword = '$cryPassword', verify_token = '$verifyToken' where empNr = 1 limit 1");
    }

目前问题是创建数据库速度有点慢,有些字段还需要更新其他表,比如地址,城市,老是往命令行传参数也是好办法,求更好思路,谢谢

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 8

为什么每个租户都要一个数据库,不能都在一个数据库中吗

3年前 评论
finleyma (楼主) 3年前

创建数据库不可能慢的,除非你进行了导入大量数据。有几个思路可供你参考: 1、如果你每次导入的都是一些模板数据,都是一样的话,可以采用预导入方式,平时弄个任务先导好几个库备用,自己维护一个数据库使用对应关系表,每次新用户使用的时候,直接从备用库拿就好了。 2、导入大量数据的话,php单线程执行比较慢,可以使用多线程导入,php实现起来比较繁琐,这块可以采用其他语言

3年前 评论
_杭城浪子 3年前

每传建一个用户都有一个自己的二级域名是怎么实现的?

3年前 评论
oliver-l 3年前
finleyma (楼主) 3年前
jamesZhao (作者) 3年前

我记得有一个插件,完美的支持你这个功能吧;
github.com/tenancy/multi-tenant

3年前 评论

不建议分开库,真的维护起来太费劲了。单库虽然大。但是维护简单啊。备份简单。目前我也是多租户,单库解决。主要是看用户业务逻辑是否一致。

3年前 评论

我目前已经实现你说的功能了,确实,现在创建 租户的时候有点慢,大概10几秒。因为调用migration 还要调用各种seeder

3年前 评论
JeffreyBool

不能异步的方式吗?先把主要逻辑同步做完,然后丢个消息队列去异步处理

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!