0

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

4

1 回答 1

0

这并不能完全解决您的问题,但除非有法律理由将事物保存在单独的数据库中,否则我真的会尽量不这样做。您可以使用全局范围和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

于 2018-12-19T15:08:43.520 回答