具有动态连接的联邦表

tv6aics1  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(353)

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

rdrgkggo

rdrgkggo1#

这并不能完全解决你的问题,但除非有合法的理由将数据保存在不同的数据库中,否则我真的会尽量不这样做。您可以使用全局作用域和租户ID来限制用户看到的内容。
在您的用户模型上,您可以添加 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动态更改连接

相关问题