2010-12-05 13 views
0

Angenommen, ich habe 2 Tabellen in verschiedenen Datenbanken, die ein Modell
(eins-zu-eins-Spaltenaggregation) darstellen.Spaltenaggregation zwischen mehreren Datenbanken mit Doctrine

Schema:

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 

So kann ich Lehre Sammlung aus einer Tabelle abrufen:

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

Und dann aus einer anderen Tabelle Eigenschaften jedes Objekts retrive:

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

Aber, Dies führt zu zu vielen SQL-Anfragen von Table2 (eine Anfrage für jedes Objekt). Was ich versuche zu erreichen, ist eine SQL-Anfrage von jeder Tabelle.

Wenn beide Tabellen in einer Datenbank wären, würde ein einfacher Join den Trick machen. Irgendwelche Vorschläge?

Antwort

0

Wenn jemand interessiert ist, hier ist eine Lösung: im Grunde müssen Sie 2 separate Abfragen in 2 separate Ergebnismengen ausführen, und dann verbinden sie, mit Doctrine_Collection :: populateRelated() -Methode.

$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); 
Verwandte Themen