1

我有两个表应该通过外键关系连接在一起,不幸的是它们被分成两个不同的数据库。

我的问题是我是否可以创建一个Criteria允许我创建跨数据库连接查询的东西?

4

1 回答 1

3

答案是“不”而不做一些异国情调的事情。如果查看 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。

祝你好运!

于 2009-08-28T15:24:15.467 回答