我有两个表应该通过外键关系连接在一起,不幸的是它们分成两个不同的数据库。
我的问题是,我是否可以创建一个允许我创建跨数据库连接查询的Criteria
内容?
答案 0 :(得分:3)
如果不做一些异国情调,答案就是“不”。如果查看Criteria对象的源代码,它只支持一个数据库名称。
你有两个选择:
1)做两个查询并自己加入。除非你非常精通你的特定数据库,否则这是最好的。只需确保每个查询都包含您的加入字段,然后在查找时添加一个查询并从另一个查询添加。
2)在一个调用第二个数据库并虚拟连接表的数据库中配置视图或存储过程。就PHP而言,它只处理一个数据库。我知道Oracle可以做到这一点 - 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。
祝你好运!