Мы создаем веб-сайт с несколькими арендаторами, используя Yii2. Мы хотим, чтобы каждый пользователь имел свою собственную базу данных при использовании одной и той же системы. Мы также будем иметь системную базу данных, которая содержит информацию и информацию о пользователях, такую как выставление счетов.
Вот некоторые из наших вопросов.
Есть несколько ссылок, которые помогли, но не ответили на все наши вопросы.
Несколько соединений с базой данных и Yii 2.0
http://www.yiiframework.com/doc-2.0/guide-db-migrations.html
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
, добавлять свой собственный параметр, чтобы делать то, что вам нужно.