我有两个表应该通过外键关系连接在一起,不幸的是它们被分成两个不同的数据库。
我的问题是我是否可以创建一个Criteria
允许我创建跨数据库连接查询的东西?
答案是“不”而不做一些异国情调的事情。如果查看 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 的关系。您必须修改 1-many。
祝你好运!