Соединение с базой данных в Yii 2.x

Из коробки Yii 2.x поддерживает работу с 7 различными системами управления базами данными

  • MySQL
  • MariaDB
  • SQLite
  • PostgreSQL
  • CUBRID: версии 9.3 или выше.
  • Oracle
  • MSSQL: версии 2008 или выше.

Для доступа к базе, сначала необходимо создать экземпляр класса  

$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;
    }
    //................
}    

Итак после не хитрых манипуляций мы подключили базы к нашему приложению!