1

Silex フレームワークを使用して PHP アプリケーションを作成しています。私は Doctrine Service Provider を使用しており、次のように正常に接続を開くことができます:

$app->register(new Silex\Provider\DoctrineServiceProvider(), array(
    'dbs.options' => array (
        'localhost' => array(
            'driver'    => 'pdo_mysql',
            'host'      => 'localhost',
            'dbname'    => 'test',
            'user'      => 'root',
            'password'  => 'root',
            'charset'   => 'utf8',
        )
    ),
));

それは完璧に機能します。私が今欲しいのは、コードに後で別のデータベース接続を追加することです。別の要素を dbs.options に追加して実行できることはわかっていますが、後でコントローラーで実行したいと考えています (コントローラーごとに異なるデータベース接続が使用されるため)。

それは可能ですか?のようなものを使用できると思いますDriverManager::getConnection($options, $config, $manager);が、おそらくもっと良い方法があります。

ありがとう!

4

2 に答える 2

2
$conn = DriverManager::getConnection($params, $config);

これは新しい接続を生成するための元のコードなので、あなたが書いたものは問題ありません

リンク: http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/data-retrieval-and-manipulation.html

于 2014-01-21T22:21:40.790 に答える
2

DoctrineServiceProviderSilex にバンドルされているを使用して、複数の db 接続を構成できます。

db.optionsキーが接続名と値の構成オプションである構成の配列に置き換えます。

$app->register(new Silex\Provider\DoctrineServiceProvider(), array(
    'dbs.options' => array (
        'mysql_read' => array(
            'driver'    => 'pdo_mysql',
            'host'      => 'mysql_read.someplace.tld',
            'dbname'    => 'my_database',
            'user'      => 'my_username',
            'password'  => 'my_password',
            'charset'   => 'utf8',
        ),
        'mysql_write' => array(
            'driver'    => 'pdo_mysql',
            'host'      => 'mysql_write.someplace.tld',
            'dbname'    => 'my_database',
            'user'      => 'my_username',
            'password'  => 'my_password',
            'charset'   => 'utf8',
        ),
    ),
));

コントローラーで複数の接続にアクセスします。

$app->get('/blog/{id}', function ($id) use ($app) {
    $sql = "SELECT * FROM posts WHERE id = ?";
    $post = $app['dbs']['mysql_read']->fetchAssoc($sql, array((int) $id));

    $sql = "UPDATE posts SET value = ? WHERE id = ?";
    $app['dbs']['mysql_write']->executeUpdate($sql, array('newValue', (int) $id));

    return  "<h1>{$post['title']}</h1>".
            "<p>{$post['body']}</p>";
});

ソース: http://silex.sensiolabs.org/doc/providers/doctrine.html

于 2014-01-22T09:10:39.197 に答える