作業ノート

様々なまとめ、雑感など

Silexを試してみた(6) - Doctrine DBAL

Doctrine DBALを使ったDBへのアクセスについて。

Doctrine DBALのインストール

slim版にMonologは含まれていないので、composerを使ってインストールする。

composer.jsonを

{
    "require": {
        "silex/silex": "~1.1",
        "twig/twig": ">=1.8,<2.0-dev",
        "symfony/twig-bridge": "~2.3",
        "monolog/monolog": ">=1.0.0",
        "doctrine/dbal": "2.2.*"
    }
}

のように編集して、composer.pharを実行する。

$ ./composer.phar update

Service Providerの登録

Silex\Applicationregisterメソッドで登録する。今回はsqlite3を使用した。

$app->register(new Silex\Provider\DoctrineServiceProvider(), array(
    'db.options' => array(
        'driver' => 'pdo_sqlite',
        'path'   => __DIR__.'/../var/data/app.db',
    ),
));

driverは使用するDBのドライバ。 pathはsqlite3用の設定でdbファイルを指定する。

db.optionsはDBALに設定するためのオプション。オプションの内容は対応するドライバによって異なるので DBALのドキュメントを参考に設定する。

SQLの実行

$app['db']にService Providerが登録されており、このインスタンスを使ってSQLを実行する。

$sql = 'SELECT * FROM user WHERE name = ? AND pass = ?';
$user = $app['db']->fetchAssoc($sql, array($name, $pass));

なお$app['db']で参照するのは、Doctrine\DBAL\Connectionのインスタンス。

参考

関連