Вы можете добавить несколько соединений с базой данных, как и другие ответы, например: db / db_for_module.
Вы также можете настроить модуль, как я (пример с использованием расширенного шаблона Yii2):
// in common/config/main.php
[
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=test_db',
'username' => 'root',
'password' => '123456',
'charset' => 'utf8',
],
'modules' => [
'v1' => [
'class' => \frontend\modules\v1\Module::class,
// Increase the component configuration of the module
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=test_db_for_module',
'username' => 'root',
'password' => '111111',
'charset' => 'utf8',
],
],
],
],
]
Определение модуля v1
// in frontend/modules/Module.php
<?php
namespace frontend\modules\v1;
/**
* v1 module definition class.
*/
class Module extends \yii\base\Module
{
/**
* {@inheritdoc}
*/
public $controllerNamespace = 'frontend\modules\v1\controllers';
}
Однако вы должны вызвать компонент db особым образом в коде модуля, например:
// in frontend/modules/v1/controllers/TestController.php
<?php
namespace frontend\modules\v1\controllers;
/**
* Test Controller
*/
class TestController extends \yii\web\Controller {
public function actionTest()
{
\Yii::$app->modules['v1']->db->createCommand(...); // This db points to the db connection of this module configuration
// or
$this->module->db->createCommand(...) // This db points to the db connection of this module configuration
}
}
Преимущества выполненияthis:
- Вы можете использовать то же имя: db (если это то, что вы ожидаете, хотя он и называется особым образом)
- Код, отличный от этого модуля, не можетсм. конфигурацию об этой базе данных.
- Даже если у вас нет специального подключения к базе данных для этого модуля, вы все равно можете правильно вызвать подключение к базе данных по умолчанию, используя описанный выше метод (возможно, это не то, что вы ожидаете)
- Может четко указывать, что здесь используется специальная конфигурация соединения с БД.
Примечание. Это просто способ переопределить компоненты приложения по умолчанию в модуле дляссылка.Я не практиковал этот метод, но я проверил это возможно.