我有两个表应该通过外键关系连接在一起,不幸的是它们被分成两个不同的数据库。Symfony Propel:在不同的数据库中加入查询
我的问题是,我可以创建一个Criteria
thingy,允许我创建跨数据库连接查询吗?
我有两个表应该通过外键关系连接在一起,不幸的是它们被分成两个不同的数据库。Symfony Propel:在不同的数据库中加入查询
我的问题是,我可以创建一个Criteria
thingy,允许我创建跨数据库连接查询吗?
答案是“不”,而不做一些奇特的事情。如果您查看Criteria对象的来源,它只支持一个数据库名称。
你有两种选择:
1)做两个查询,自己做连接。除非你非常精通你的特定数据库,否则这是一个需要解决的问题。只要确保每个查询都包含您的连接字段,然后在查找时添加一个查询,然后添加另一个查询。
2)在一个数据库中配置一个视图或存储过程,该数据库调用第二个数据库并虚拟地连接这些表。据PHP知道,它只处理一个数据库。我知道甲骨文可以做到这一点 - MySql可能能够与一些专家配置。 (比我微薄的技能更多。)
- 更新响应您的评论 -
我没有这样做,所以我没有示例代码。这是我如何弄清楚的。 (关于我的头顶,所以不要作为福音...)
从这里开始配置您的配置: http://www.symfony-project.org/book/1_2/08-Inside-the-Model-Layer#chapter_08_database_connections。
假设您的两个连接被命名为“db1”和“db2”。
供应创建标准时,数据库名称对象:
$crit1 = new Criteria("db1");
$crit2 = new Criteria("db2");
请在你的两个数据库类的选择。
$dataOnes = DataOnePeer:doSelect($crit1);
$dataTwos = DataTwoPeer::doSelect($crit2);
然后把它们放在一起莫名其妙......
foreach ($dataOnes as $d1) {
$joinKey = $d1->getMyJoinColumn();
$d2 = findByKey($dataTwos, $joinKey);
if (!empty($d2)) {
$d1->myD2 = $d2;
}
}
function findByKey($dataTwoArr, $key) {
foreach($dataTwoArr as $d2) {
if ($key == $d2->getMyJoinColumn()) {
return $d2;
}
}
return null;
}
这个假设一个1-1的关系。你将不得不修改为一对多。
祝你好运!
做自己..你有一个例子吗? – Graviton 2009-08-28 15:26:21