【问题标题】:Federated Table with a Dynamic Connection具有动态连接的联合表
【发布时间】:2019-05-20 02:16:14
【问题描述】:

我有类似 B2B 的应用程序,面临的挑战是我的每个客户都需要将他们的数据存储在不同的 RDS 中。我打算使用 MySQL 联合引擎来实现这一点,但是在创建本地表时,我们需要指定连接字符串,但这是否可以根据登录的用户更改这些连接字符串?我的意思是将每个用户的连接数据存储在本地数据库中,然后我们访问这些用户数据需要将该连接字符串添加到联合表中,这可能吗?我正在使用 Laravel 和 MySQL 开发我的应用程序。

【问题讨论】:

    标签: mysql laravel-5 federated


    【解决方案1】:

    这并不能完全解决您的问题,但除非有合法的理由将内容保存在单独的数据库中,否则我真的会尽量不这样做。您可以使用全局范围和tenant_ids 来限制用户看到的内容。

    在您的用户模型上,您将添加一个 tenant_id 列,然后在您的所有模型上使用全局范围:

    class TenantScope implements Scope
    {
        public function apply(Builder $builder, Model $model)
        {
            $builder->where('tenant_id', \Auth::user()->tenant_id);
        }
    }
    
    class Widget extends Model {
    
        protected static function boot()
        {
            parent::boot();
    
            static::addGlobalScope(new TenantScope);
        }
    }
    

    这样,每当用户访问模型时,他们只会收到分配给他们的模型。维护单独的数据库有很多令人头疼的问题(迁移、无法全局查询等),所以如果你能避免的话,你应该这样做。

    这是另一个关于即时更改连接的问题,如果您必须这样做可能会有所帮助:Laravel Change Connection Dynamically

    【讨论】:

    • 谢谢 Jeff,但根据我的客户要求,需要将他们的数据保存在单独的数据库中
    猜你喜欢
    • 2018-10-16
    • 2021-09-28
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多