2009-08-28 65 views

回答

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的关系。你将不得不修改为一对多。

祝你好运!

+0

做自己..你有一个例子吗? – Graviton 2009-08-28 15:26:21

相关问题