【问题标题】:Add connection to DBAL dynamically in Silex在 Silex 中动态添加到 DBAL 的连接
【发布时间】:2014-02-11 17:25:31
【问题描述】:

我正在使用 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); 之类的东西,但可能有更好的方法。

谢谢!

【问题讨论】:

    标签: php doctrine silex dbal


    【解决方案1】:
    $conn = DriverManager::getConnection($params, $config);
    

    这是生成新连接的原始代码,所以你写的没问题

    链接:http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/data-retrieval-and-manipulation.html

    【讨论】:

      【解决方案2】:

      您可以使用与 Silex 捆绑的DoctrineServiceProvider 配置多个数据库连接。

      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

      【讨论】:

      • 这不是被问到的。
      猜你喜欢
      • 2018-04-09
      • 2015-10-19
      • 1970-01-01
      • 2014-08-28
      • 2016-02-23
      • 1970-01-01
      • 2012-01-14
      • 2016-11-22
      • 2018-02-24
      相关资源
      最近更新 更多