使用Symfony/Doctrine连接外部临时数据库

4

概述:

我想能够针对外部数据库运行查询,以在用户登录时获取所需数据。我不希望本站点对外部数据库做任何其他操作。长期来看,可能需要能够将数据推回去,但具体而言,我不希望Symfony尝试构建外部数据库的架构,它应该只是让它保持原样,允许不时进行连接。

详细信息:

我正在尝试创建到另一个Symfony应用程序的临时连接,但似乎无法弄清楚如何实现。

我有一个现有的Symfony网站已经设置和运行。我正在尝试为此主站的用户创建一种管理系统。管理系统将为每个选择加入的用户单独部署,因此它还将具有与之相关联的自己的数据库。但是,此管理系统需要访问主站系统中的2或3个表。

我尝试添加databases.yml中的单独条目,以创建到两个数据库的连接,但是每当我构建所有内容时,它都想将我的模式放入两个数据库中。

我想到的最好的主意是在管理系统的所有表格中放置connection: management,并在主站的所有表格中也放置connection: main_site。但是,这将要求我在管理系统和主站上维护yml文件,以确保它们彼此保持最新。

希望这至少有点清楚。

感谢您的帮助:D

1个回答

5

如果需要在远程站点上临时连接而无法使用DQL,则只需通过Doctrine_Manager打开连接即可:

$conn = Doctrine_Manager::getInstance()->openConnection('mysql://username:password@localhost/database', 'connection 2', false);

确保第三个参数为false,这样它就不会成为当前连接。然后,您可以使用PDO在连接上运行查询:

$conn->exec('SELECT * FROM table WHERE conditon = ?', array('value'));

如果你想要使用DQL和远程模式,你需要按照你所概述的方式:定义两个连接并在两个地方都保持架构(你的版本控制应该能够处理这一点)。


这听起来就是我需要的答案。由于查询数量非常少,我认为我不需要使用DQL来保持清洁。最终我可能需要包含两个模式,但这很麻烦,因为各种插件都有自己的模式等。谢谢! - gregghz
原来我遇到了这个错误:调用未定义的方法userActions::parseDsn。显然,当运行代码时,userActions将是我所在的操作。唯一运行的代码几乎与您展示设置$conn的代码完全相同。 - gregghz
我需要使用Doctrine_Manager::getInstance()->openConnection()来避免错误。 - gregghz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接