2015-01-21 2 views
1

Мы создаем веб-сайт с несколькими арендаторами, используя Yii2. Мы хотим, чтобы каждый пользователь имел свою собственную базу данных при использовании одной и той же системы. Мы также будем иметь системную базу данных, которая содержит информацию и информацию о пользователях, такую ​​как выставление счетов.Настройка нескольких баз данных с несколькими арендаторами

Вот некоторые из наших вопросов.

  1. Как сделать второе подключение к базе данных (db2) динамическим на основе информации, хранящейся в первом соединении с базой данных (db)?
  2. Как настроить миграцию для всех баз данных арендаторов (db2), когда они являются динамическими?
  3. Как настроить таргетинг на одну динамическую базу данных при начальной миграции?

Есть несколько ссылок, которые помогли, но не ответили на все наши вопросы.

Multiple database connections and Yii 2.0

http://www.yiiframework.com/doc-2.0/guide-db-migrations.html

ответ

2

1) Все зависит от того, как вы установите его. Как вы помните, какой пользователь должен использовать какую-либо БД? Вы всегда можете сделать что-то вроде

'components' => [ 
     'db1' => [ 
      'class' => 'yii\db\Connection', 
      'dsn' => 'mysql:host=localhost;dbname=db1name', //maybe other dbms such as psql,... 
      'username' => 'db1username', 
      'password' => 'db1password', 
     ], 
     'db2' => function() use ($whatever, $variables, $you, $need) { 
      return [ 
       'class' => 'yii\db\Connection', 
       'dsn' => 'mysql:host=localhost;dbname=' . GETTHEDATABASEINAWAY, 
       'username' => GETTHEUSERINAWAY, 
       'password' => GETTHEPASSINAWAY, 
      ], 
     } 
    ], 

]; 

Больше на анонимные функции http://php.net/manual/en/functions.anonymous.php

2) Вы, вероятно, список баз данных где-нибудь. Создайте свой собственный контроллер миграции, который расширяет основной, и вы можете вызвать его для миграции вместо обычного контроллера yii 2. в консоли вы можете создать migrationController.php, который расширяет Yii2 один, вместо того, чтобы звонить php yii migrate/up, вы вызываете php yii migration/up.

Вы также можете обмануть систему, чтобы использовать свой собственный MigrateControllor, чтобы вы все еще могли использовать php yii migrate/up, попробуйте использовать правила URL для этого. Я видел, как парень делает это по-другому, но я не могу найти место.

3) если вы создаете свой собственный контроллер миграции (см. Номер 2), просто добавьте параметры в команду миграции. Прямо сейчас он может получать такие параметры, как --migration-path и --db, добавьте свой собственный параметр, чтобы сделать то, что вам нужно.

Смежные вопросы