Объединенная таблица с динамическим соединением - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть приложение, похожее на B2B, перед которым стоит задача - каждый мой клиент должен хранить свои данные в разных RDS.Я планирую добиться этого с помощью механизма объединения MySQL, но при создании локальной таблицы нам нужно указать строку подключения, но возможно ли изменить строку подключения в зависимости от пользователя, вошедшего в систему?Я имею в виду, что данные о соединении каждого пользователя будут храниться в локальной базе данных, а затем для доступа к данным этих пользователей необходимо добавить эту строку соединения в федеративную таблицу, это возможно?Я разрабатываю свое приложение, используя Laravel и MySQL.

1 Ответ

0 голосов
/ 19 декабря 2018

Это не решит ваш вопрос точно, но если нет законной причины хранить вещи в отдельных базах данных, я бы на самом деле старался этого не делать.Вы можете использовать глобальные области видимости и 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);
    }
}

Таким образом, когда пользователь получит доступ к модели, он получит толькоте, которые назначены им.Есть много головных болей, связанных с поддержкой отдельных баз данных (миграция, отсутствие возможности делать глобальные запросы и т. Д.), Поэтому, если вы можете избежать этого, вам следует.

Вот еще один вопрос об изменении соединений на лету, который может помочь, если выmust: Laravel Изменить соединение динамически

...