【问题标题】:Can I define a new connection / Entity manager within a Bundle configuration?我可以在 Bundle 配置中定义新的连接/实体管理器吗?
【发布时间】:2012-06-01 15:00:02
【问题描述】:

我正在尝试定义一个 Bundle 来帮助索引 sqlite fts 表中的一些数据(来自实体),以便进行一些全文搜索。

我知道我可以使用 app 配置文件(如食谱中所示)定义备用连接和实体管理器,但我想知道是否可以在捆绑配置中这样做 - 例如通过定义,注入了doctrine 服务的服务,以便它可以实例化一个新的连接。

Sqlite 不是强制性的,可以是任何数据库类型(学说支持)。

提前感谢您的帮助。

【问题讨论】:

  • 您看过 WebProfilerBundle 了吗?它使用 sqlite,所以它可以满足您的需求。
  • 我确实做到了,但显然太快了。让我们再次深入代码...
  • 它是 Profiler 服务(在 HttpKernel 内),它从头开始创建和管理 Sqlite DB ...

标签: symfony doctrine-orm


【解决方案1】:

我建议查看FOSUserBundle,了解它们如何处理多个持久层(ORM、Couch、MongoDB)。你基本上会做同样的事情。只需根据 app/config/config.yml 中指定的驱动加载不同的配置即可。

【讨论】:

    【解决方案2】:

    据我所知,这是不可能的。此外,数据库连接应集中在 app/config.yml 中进行管理。

    我建议在那里定义连接并为您的捆绑包添加一个配置选项,您可以在其中指定用于索引内容的至极连接。

    # app/config.yml
    doctrine:
        dbal:
            default_connection:   default
            connections:
                default:
                    dbname:               database
                    host:                 localhost
                    user:                 user
                    password:             secret
                    driver:               pdo_mysql
                my_data_index:
                    dbname:               database
                    driver:               pdo_sqlite
    
    # configuration option of you bundle
    acme_indexer:
        connection: my_data_index
    

    然后,您可以在您的包中读取此配置选项并获取连接/实体管理器并将其注入您的索引服务。

    编辑:

    您肯定可以在包中以编程方式创建自定义连接

    $params =   array(
        'driver'    =>'pdo_sqlite',
        ....
    );
    
    $factory = $container->get('doctrine.dbal.connection_factory')
    $connection = $factory->createConnection($params);
    

    但正如我之前所说,这是一种不好的做法,因为您会回避 symfony 定义数据库连接的标准方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多