Doctrine DBAL

Doctrine DBALはDoctrineが提供しているデータベースの抽象化レイヤーです。

composerでRay.DbalModuleをインストールします。

composer require ray/dbal-module

アプリケーションモジュールでDbalModuleをインストールします。

use Ray\DbalModule\DbalModule;
use BEAR\Package\AbstractAppModule;

class AppModule extends AbstractAppModule
{
    protected function configure()
    {
        // ...
        $this->install(new DbalModule('driver=pdo_sqlite&memory=true'));
    }
}

これでDIの設定が整いました。DbalInjectトレイトを利用すると$this->dbにDBオブジェクトがインジェクトされます。

use Ray\DbalModule\DbalInject;

class Index
{
    use DbalInject;
    
    public function onGet()
    {
        return $this->db; // \Doctrine\DBAL\Driver\Connection
    }
}

複数DB

複数のデータベースの接続には二番目の引数に識別子を指定します。

$this->install(new DbalModule($logDsn, 'log_db'));
$this->install(new DbalModule($jobDsn, 'job_db'));
/**
 * @Inject
 * @Named("log_db")
 */
public function setLogDb(Connection $logDb)

MasterSlaveConnectionというリプリケーションのためのマスター/スレーブ接続が標準で用意されています。