Из коробки Yii 2.x поддерживает работу с 7 различными системами управления базами данными
Для доступа к базе, сначала необходимо создать экземпляр класса
$db = new yii\db\Connection([ 'dsn' => 'mysql:host=localhost;dbname=basename', 'username' => 'root', 'password' => '', 'charset' => 'utf8', ]);
Часто требуется подключать базу в различных местах, поэтому распространенной практикой является настройка компонента приложения. Для этого в файле web.php прописываем следующий код:
return [ //... 'components' => [ //... 'db' => require(__DIR__ . '/db.php'), ], //... ];
Выносим подключение в файл db.php. В файле подключения вставляем следующий код:
return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=basename', 'username' => 'root', 'password' => '', 'charset' => 'utf8', ];
Теперь вы можете получить доступ к подключению к текущей БД с помощью выражения Yii::$app->db
, для доступа к последующей базе данных используйте выражение \Yii::$app->secondDb
Рассмотрим несколько примеров описания имени источника данных для разных СУБД
MySQL, MariaDB: mysql:host=localhost;dbname=mydatabase
SQLite: sqlite:/path/to/database/file
PostgreSQL: pgsql:host=localhost;port=5432;dbname=mydatabase
CUBRID: cubrid:dbname=demodb;host=localhost;port=33000
MS SQL Server (via sqlsrv driver): sqlsrv:Server=localhost;Database=mydatabase
MS SQL Server (via dblib driver): dblib:host=localhost;dbname=mydatabase
MS SQL Server (via mssql driver): mssql:host=localhost;dbname=mydatabase
Oracle: oci:dbname=//localhost:1521/mydatabase
Подключим 2 базы данных, для этого в файле web.php прописываем следующий код:
return [ //... 'components' => [ //... 'firstdb' => require(__DIR__ . '/firstdb.php'), 'seconddb' => require(__DIR__ . '/seconddb.php'), ], //... ];
Файлы firstdb.php и seconddb.php непосредственно будут отвечать за соединение с базами. Далее назначим каждой модели свою базу, для этого в модили пишем следующий код:
namespace app\models; use Yii; class Firstmodel extends \yii\db\ActiveRecord { public static function getDb() { return \Yii::$app->firstdb; } //................ }
namespace app\models; use Yii; class Secondmodel extends \yii\db\ActiveRecord { public static function getDb() { return \Yii::$app->seconddb; } //................ }
Итак после не хитрых манипуляций мы подключили базы к нашему приложению!