Laravel多数据怎么动态连接?

大概需求就是,用户登录的时候有个主的数据库去查询用户。这个用户表会有个字段是数据库名称
每个用户就有一个单独的数据库,用户登录之后,怎么只能让他链接他自己固定的数据库?

每个用户的数据库所有表都是一样的,除了库名不一样

问题总结:怎么用laravel框架实现动态数据库链接,每个用户登录只使用到自己的数据库

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
最佳答案

建一个中间件,并注册。

 public function handle($request, \Closure $next)
    {
        $default_config = Config::get('database.connections.mysql');  // 默认数据库配置

        $user_database =  sprintf("user_%d_database",1);
        $user_config = $default_config['database'] = $user_database
        Config::set('database.connections.'.$user_database, $default_config);

        // 此时 dd( config('database.connections.user_1_database')) 可以获取用户1的数据库配置
        DB::setDefaultConnection($user_database); // 设置默认数据库为用户1
        return $next($request);
    }

注意无用户登陆标识情况,如微信支付, 该选择那个库?

8个月前 评论
Ancient (楼主) 8个月前
讨论数量: 6

我没这么搞过, 你可以尝试一下下面这个能不能解决你的问题 092. 多站点架构方案(一套代码部署多个站点)——hyn/multi-tenant

8个月前 评论
陈先生

直接问 Saas 如何一个租户一个库。

  1. 使用现成的包
  2. 先使用主库来完成查询获取租户库的配置信息,使用租户数据库来进行连接,重新 setDefaultConnection 就可以了。
8个月前 评论

建一个中间件,并注册。

 public function handle($request, \Closure $next)
    {
        $default_config = Config::get('database.connections.mysql');  // 默认数据库配置

        $user_database =  sprintf("user_%d_database",1);
        $user_config = $default_config['database'] = $user_database
        Config::set('database.connections.'.$user_database, $default_config);

        // 此时 dd( config('database.connections.user_1_database')) 可以获取用户1的数据库配置
        DB::setDefaultConnection($user_database); // 设置默认数据库为用户1
        return $next($request);
    }

注意无用户登陆标识情况,如微信支付, 该选择那个库?

8个月前 评论
Ancient (楼主) 8个月前
随波逐流

多租户包推荐

composer require spatie/laravel-multitenancy
8个月前 评论
sanders

可以考虑使用辅助函数 config() 通过传入数组的方式覆盖配置。如果像楼上朋友所说使用中间件的话,还需要考虑队列消费和定时脚本的执行问题。所以建议在所有入口显性设置属主信息。

8个月前 评论

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