2009-08-28 3 views

Répondre

3

La réponse est "non" sans faire quelque chose d'exotique. Si vous regardez la source de l'objet Criteria, il ne prend en charge qu'un seul nom de base de données.

Vous avez deux options:

1) Effectuer deux requêtes et faire vous-même JOIN. Sauf si vous êtes très versé dans votre base de données, c'est celui avec lequel vous devez aller. Assurez-vous simplement que chaque requête inclut votre champ de jointure, puis foreach plus d'un pendant que vous recherchez et ajoutez de l'autre.

2) Configurez une vue ou une procédure stockée dans une base de données qui appelle la deuxième base de données et joint virtuellement les tables. Pour autant que PHP le sache, il ne s'agit que d'une base de données. Je sais qu'Oracle peut le faire - MySql pourrait le faire avec une configuration experte. (Plus de mes compétences maigres.)

- mise à jour en réponse à votre commentaire -

Je ne l'ai pas fait cela, donc je n'ai pas exemple de code. Voici comment je le comprendrais. (Du haut de ma tête, alors ne prenez pas comme gospel ...)

Commencez ici avec votre configuration: http://www.symfony-project.org/book/1_2/08-Inside-the-Model-Layer#chapter_08_database_connections. Imaginons que vos deux connexions aient été nommées "db1" et "db2".

fournir un nom de base de données lors de la création de vos critères objet:

$crit1 = new Criteria("db1"); 
$crit2 = new Criteria("db2"); 

Faites vos sélections sur vos deux classes de base de données.

$dataOnes = DataOnePeer:doSelect($crit1); 
$dataTwos = DataTwoPeer::doSelect($crit2); 

les mettre ensemble en quelque sorte ...

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; 
} 

Cela suppose une relation 1-1. Vous devrez modifier pour 1-plusieurs.

Bonne chance!

+0

Faire la jointure moi-même .. vous avez un exemple pour cela? – Graviton

Questions connexes