2010-12-05 65 views
0

假設我在不同的數據庫中有兩個表格代表一個模型
(一對一的列聚合)。使用Doctrine的多個數據庫之間的列聚合

模式:

Table1: 
    connection: conn1 
    columns: 
    property1: string 
Table2: 
    connection: conn2 
    columns: 
    table1_id: integer 
    property2: string 
    relations: 
    Table2: 
     local: table1_id 
     foreign: id 
     type: one 
     foreignType: one 

所以我可以從一個表中檢索學說集合:

$objects = Doctrine::getTable('Table1')->findAll() 

,然後從另一個表retrive每個對象的屬性:

foreach ($objects as $object) 
{ 
    $object->getProperty2(); 
} 

但是,這將導致來自Table2的太多的SQL請求(每個對象有一個請求)。 我想要實現的是每個表中的一個sql請求。

如果兩個表在哪一個數據庫中,簡單的連接就可以做到。 有什麼建議嗎?

回答

0

如果有人感興趣,下面是一個解決方案:基本上你需要執行2個獨立的查詢,得到2個獨立的結果集,然後使用Doctrine_Collection :: populateRelated()方法將它們連接起來。

$res_set1 = Doctrine::getTable('Table1')->findAll() 
$res_set2 = Doctrine::getTable('Table2') 
    ->createQuery('t') 
    ->whereIn('t.table1_id', $res_set1->getPrimaryKeys()) 
    ->execute(); 

$res_set1->populateRelated('Table2', $res_set2);