Symfony中的同一捆绑包是否可以使用两个具有不同数据库的不同文档管理器?

马蒂亚斯

我的目标是让两个不同的文档管理器连接到共享相同数据库模型的不同数据库。

我已经对数据库模型进行了很大的更改,我想编写一个自定义迁移脚本,该脚本从旧模型中检索对象并读取其值,然后使用旧对象的信息在新架构上创建一个新对象。

我在这里发现了一个相关的stackoverflow问题:在Symfony2的同一捆绑中使用两个实体管理器

但是,该解决方案建议为每个数据库使用不同的前缀,并将数据模型的类存储在不同的文件夹中:

doctrine:
dbal:
    default_connection:   default
    connections:
        default:
            driver:   %database_driver%
            host:     %database_host%
            port:     %database_port%
            dbname:   %database_name%
            user:     %database_user%
            password: %database_password%
            charset:  UTF8
        second:
            driver:   %database_sqlite_driver%
            host:     ~
            port:     ~
            dbname:   %database_sqlite_shop_name%
            path:     %database_sqlite_shop_name%
            user:     ~
            password: ~
            charset:  UTF8

orm:
    auto_generate_proxy_classes: %kernel.debug%
    default_entity_manager:   default
    entity_managers:
        default:
            connection:       default
            mappings:
                YourBundle:
                  # you must specify the type
                  type:     "annotation"    
                  # The directory for entity (relative to bundle path)
                  dir:      "Entity/FirstDb"        
                  #the prefix 
                  prefix:   "Your\Bundle\Entity\FirstDb" 
        shop:
            connection:       second
            mappings:
                YourBundle:
                  type: "annotation"
                  #here the second path where entity for the connection stand
                  dir: "Entity/SecondDb" 
                  #the prefix
                  prefix: "Your\Bundle\Entity\SecondDb" 

我真的很想拥有两个不同的文档管理器对象,它们在同一文件夹中共享相同的模型,但是连接到不同的数据库。这可能吗?

马蒂亚斯

我发现确实可以在同一Symfony捆绑包中连接到不同的数据库。这个答案使我想到了一个可能的解决方案:https : //stackoverflow.com/a/15110867/2174832

#services.yml
acme_app.dynamic_connection:
class: %acme.dynamic_doctrine_connection.class%
calls:
    - [setDoctrineConnection, @doctrine.dbal.default_connection]]


<?php

namespace Acme\Bundle\AppBundle;

use Doctrine\DBAL\Connection;
use Symfony\Component\HttpKernel\Exception\ServiceUnavailableHttpException;
use Exception;

class DynamicDoctrineConnection
{
    /**
     * @var Connection
     */
    private $connection;

    /**
     * Sets the DB Name prefix to use when selecting the database to connect to
     *
     * @param  Connection       $connection
     * @return SiteDbConnection $this
     */
    public function setDoctrineConnection(Connection $connection)
    {
        $this->connection = $connection;

        return $this;
    }

    public function setUpAppConnection()
    {
        if ($this->request->attributes->has('appId')) {
            $connection = $this->connection;
            $params     = $this->connection->getParams();

            // we also check if the current connection needs to be closed based on various things
            // have left that part in for information here
            // $appId changed from that in the connection?
            // if ($connection->isConnected()) {
            //     $connection->close();
            // }

            // Set default DB connection using appId
            //$params['host']   = $someHost;
            $params['dbname'] = 'Acme_App'.$this->request->attributes->get('appId');

            // Set up the parameters for the parent
            $connection->__construct(
                $params, $connection->getDriver(), $connection->getConfiguration(),
                $connection->getEventManager()
            );

            try {
                $connection->connect();
            } catch (Exception $e) {
                // log and handle exception
            }
        }

        return $this;
    }
}

通过上述解决方案,可以编写一项服务,可以将其更改为将当前实体管理器连接到的数据库更改为其他数据库的服务。

不幸的是,上述解决方案仅适用于PDO驱动程序(Mysql)。由于我们的技术堆栈包括mongodb,并且我们使用了doctrine-mongodb捆绑包,因此我不得不寻找不同的解决方案

doctrine-mongodb文档在此处提供了有关设置自定义文档管理器的部分:http : //docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/introduction.html

我无法获得正确的doctrine-mongodb odm文档映射来与文档中的说明一起使用,因此对我而言,唯一的解决方案是创建一个简单的PHP mongoclient连接:

$mongo = new \Mongo('mongodb://localhost:27017');
$legacyDbDocumentMangager = $mongo->selectDB('backed_up_prod_db');
$legacyUserCollection = $legacyDbDocumentMangager->selectCollection('User');
$user = $legacyUserCollection->findOne(array('email' => '[email protected]'));

这个简单的php mongodb驱动程序和doctrine-mongodb odm之间的唯一区别是,该驱动程序的查询结果是关联数组,而doctrine-mongodb odm diver的结果是对象。

我希望这些信息对某人有用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在两个守护进程中的同一数据库上使用 Doctrine 实体管理器

来自分类Dev

是否可以在一个xpage视图中显示两个不同的数据库文档

来自分类Dev

两个NSPersistentStoreCoordinator可以使用同一数据库吗?

来自分类Dev

如何在mongodb中将一个文档保存到同一数据库的两个不同集合中

来自分类Dev

在目录数据库中具有两个不同类别ID的产品ID

来自分类Dev

在目录数据库中具有两个不同类别ID的产品ID

来自分类Dev

两个具有相同结构但命名约定不同的数据库可互换使用

来自分类Dev

从两个不同的表中选择一个查询Access数据库中具有不同字段的列

来自分类Dev

从两个不同的表中选择一个查询Access数据库中具有不同字段的列

来自分类Dev

是否可以使一个函数接受具有相同定义的两个不同的求和类型?

来自分类Dev

在PHP/MYSQL中从同一数据库的两个不同表中选择数据

来自分类Dev

在Symfony2中使用2个数据库和一个实体管理器

来自分类Dev

是否可以将数据刮到两个不同的数据库表?

来自分类Dev

同一台服务器上具有不同名称的相同数据库。需要一种管理数据库对象的方法

来自分类Dev

两个应用程序可以具有相同的捆绑包名称,但是具有不同的捆绑包标识符吗?

来自分类Dev

在同一台服务器中使用来自不同域的两个数据库

来自分类Dev

如何在同一模型中具有两个标签字段,即两个标签管理器?

来自分类Dev

SQL Server与来自同一Azure SQL SERVER的不同Azure SQL数据库中的两个表合并

来自分类Dev

从两个不同的数据库检索同一DTO的信息

来自分类Dev

流星具有相同代码但不同的mongo数据库的两个服务器实例

来自分类Dev

您可以使用具有相同 Firestore 数据库的两个 iOS 应用程序吗?

来自分类Dev

是否可以在同一捆绑包中包含脚本和样式?(asp.net mvc5)

来自分类Dev

是否可以在同一捆绑包中包含脚本和样式?(asp.net mvc5)

来自分类Dev

在liferay中是否可以使用两个不同的端口运行一个本地主机?

来自分类Dev

各种用户可以访问数据库中的同一表并对每个人具有不同的值吗?

来自分类Dev

是否可以在网络管理器的同一物理连接上激活两个网络?

来自分类Dev

是否有任何方法可以使用strptime方法在python中减去两个不同的日期

来自分类Dev

访问:同一数据库上的 2 个角色具有不同的角色

来自分类Dev

git用于具有一个不同文件的两个应用程序

Related 相关文章

  1. 1

    在两个守护进程中的同一数据库上使用 Doctrine 实体管理器

  2. 2

    是否可以在一个xpage视图中显示两个不同的数据库文档

  3. 3

    两个NSPersistentStoreCoordinator可以使用同一数据库吗?

  4. 4

    如何在mongodb中将一个文档保存到同一数据库的两个不同集合中

  5. 5

    在目录数据库中具有两个不同类别ID的产品ID

  6. 6

    在目录数据库中具有两个不同类别ID的产品ID

  7. 7

    两个具有相同结构但命名约定不同的数据库可互换使用

  8. 8

    从两个不同的表中选择一个查询Access数据库中具有不同字段的列

  9. 9

    从两个不同的表中选择一个查询Access数据库中具有不同字段的列

  10. 10

    是否可以使一个函数接受具有相同定义的两个不同的求和类型?

  11. 11

    在PHP/MYSQL中从同一数据库的两个不同表中选择数据

  12. 12

    在Symfony2中使用2个数据库和一个实体管理器

  13. 13

    是否可以将数据刮到两个不同的数据库表?

  14. 14

    同一台服务器上具有不同名称的相同数据库。需要一种管理数据库对象的方法

  15. 15

    两个应用程序可以具有相同的捆绑包名称,但是具有不同的捆绑包标识符吗?

  16. 16

    在同一台服务器中使用来自不同域的两个数据库

  17. 17

    如何在同一模型中具有两个标签字段,即两个标签管理器?

  18. 18

    SQL Server与来自同一Azure SQL SERVER的不同Azure SQL数据库中的两个表合并

  19. 19

    从两个不同的数据库检索同一DTO的信息

  20. 20

    流星具有相同代码但不同的mongo数据库的两个服务器实例

  21. 21

    您可以使用具有相同 Firestore 数据库的两个 iOS 应用程序吗?

  22. 22

    是否可以在同一捆绑包中包含脚本和样式?(asp.net mvc5)

  23. 23

    是否可以在同一捆绑包中包含脚本和样式?(asp.net mvc5)

  24. 24

    在liferay中是否可以使用两个不同的端口运行一个本地主机?

  25. 25

    各种用户可以访问数据库中的同一表并对每个人具有不同的值吗?

  26. 26

    是否可以在网络管理器的同一物理连接上激活两个网络?

  27. 27

    是否有任何方法可以使用strptime方法在python中减去两个不同的日期

  28. 28

    访问:同一数据库上的 2 个角色具有不同的角色

  29. 29

    git用于具有一个不同文件的两个应用程序

热门标签

归档