Php symfony2使用条令的动态数据库连接

Php symfony2使用条令的动态数据库连接,php,mysql,symfony,doctrine-orm,doctrine,Php,Mysql,Symfony,Doctrine Orm,Doctrine,我试图在Symfony 2中使用doctrine建立多个数据库连接,但无法做到这一点 我在Google和stack overflow中进行了广泛的搜索,但在任何地方都是通过config.yml文件或动态数据库完成的,其中所有数据库都具有相同的模式/实体 但在我的例子中,数据库是基于子域确定的,并且并非所有子域的数据库架构都相同。 Ex: test1.example.com=>应该加载test1db test2.example.com=>将加载test2db test1和test2数据库都不同,它

我试图在Symfony 2中使用doctrine建立多个数据库连接,但无法做到这一点

我在Google和stack overflow中进行了广泛的搜索,但在任何地方都是通过config.yml文件或动态数据库完成的,其中所有数据库都具有相同的模式/实体

但在我的例子中,数据库是基于子域确定的,并且并非所有子域的数据库架构都相同。

Ex:
test1.example.com=>应该加载test1db
test2.example.com=>将加载test2db

test1和test2数据库都不同,它们是在DB级别创建的,在条令中没有实体条目。


有谁能帮我在Symfony 2中如何做到这一点。

在我看来,使用ODM理论并不是正确的方法。您仍然可以使用条令连接到数据库并查询它们。但是如果您没有实体类,那么使用实体管理器似乎是不合适的

使用连接处理原则 下面是如何使用doctrine
connection
类创建到数据库的连接:

/** @var \Doctrine\Bundle\DoctrineBundle\ConnectionFactory $connectionFactory */
$connectionFactory = $this->getContainer()->get('doctrine.dbal.connection_factory');
$connection = $connectionFactory->createConnection(
    array('pdo' => new \PDO("mysql:host=$hostname;dbname=$dbname", $username, $password))
);
现在,您可以将
$connection
用作一个简单的
PDO
对象:

$connection->executeQuery('SELECT * FROM your_table');
您可以将此代码添加为服务,使其在任何地方都可以访问。
如果要连接到不同域的不同数据库,可以使用以下代码标识该域:

$this->getRequest()->getHost();
要在操作中访问域,请执行以下操作:

多亏了byf ferdy(),我才能够了解如何使用其他没有条令实体的DB。只需在动作控制器中使用以下代码

$connectionFactory = $this->get('doctrine.dbal.connection_factory');                
$connection = $connectionFactory->createConnection(
                array('pdo' => new \PDO("mysql:host=$hostname;dbname=$dbname", 
                       $username,$password))
 );
 $query = $connection->executeQuery('SELECT * FROM multi_client');
 $results = $query->fetchAll();
要知道访问的子域,可以使用 $domain=$request->getHost()

因此,需要更改数据库名称和其他参数。
希望它能帮助其他人

您是否试图在不创建条令实体的情况下做到这一点?如果是的话,实体对象是如何管理的?是的,我不会创建条令条目,因为我之前不知道模式/表结构。表和数据库名称是已知的,但表的字段不是已知的,因为它可以由子域管理员更改/删除/更改。示例:test3.Example.com的管理员将添加字段/自定义表,这些字段直接使用SQL完成。之后,test3.example.com的其他用户将使用这些表。我知道我可以直接使用SQL进行查询,但这会导致编码混乱,因为我必须处理所有事情:(希望在条令+Symfony 2中有某种方法。即使我为每个新数据库创建条令实体,它也会导致更多问题,因为条令条目依赖于物理文件,这对SAAS环境不利:((特别是在AWS中基于负载自动放大/缩小时)感谢您的帮助。我尝试了同样的操作,但失败了。:(I$this->getContainer()在控制器中不可用。我搜索发现它必须在服务中完成。我做了相同的操作。创建了一个服务并添加了代码,但它仍然不起作用。我引用此创建了一个服务。你能帮我吗?我们应该在哪里编写getContainer()代码以及如何在控制器中使用它们。我已经添加了一个示例,说明如何访问ControllerGlad中的
请求
对象。
$connectionFactory = $this->get('doctrine.dbal.connection_factory');                
$connection = $connectionFactory->createConnection(
                array('pdo' => new \PDO("mysql:host=$hostname;dbname=$dbname", 
                       $username,$password))
 );
 $query = $connection->executeQuery('SELECT * FROM multi_client');
 $results = $query->fetchAll();