Pregunta

Tengo dos tablas que deben estar unidos por una relación de clave externa, lamentablemente son separados en dos bases de datos diferentes.

Mi pregunta es que es posible para mí para crear un Criteria cosita que me permite crear cruz de la base de datos de consulta de combinación?

¿Fue útil?

Solución

La respuesta es "no" sin hacer algo exótico.Si usted mira en la fuente de los Criterios objeto, sólo es compatible con un nombre de base de datos.

Tienes dos opciones:

1) Hacer dos consultas y hacer la combinación en sí mismo.A menos que estés muy bien versado en la base de datos, este es el uno para ir con.Sólo asegúrese de que cada consulta incluye su campo de combinación, entonces foreach más de uno, mientras que la búsqueda y el complemento de la otra.

2) Configurar una vista o un procedimiento almacenado en una base de datos que llama a la segunda base de datos y se une a las tablas prácticamente.Tan lejos como PHP sabe, es sólo trabaja con una base de datos.Sé que Oracle puede hacer esto -- MySql podría ser capaz de, con algunos expertos de la configuración.(Más de mi escasa habilidad.)

-- actualización en respuesta a tu comentario --

Yo no he hecho esto para no tener código de ejemplo.He aquí cómo me gustaría averiguar.(Fuera de la parte superior de mi cabeza, así que no tome como evangelio...)

Comienza aquí con la configuración:http://www.symfony-project.org/book/1_2/08-Inside-the-Model-Layer#chapter_08_database_connections.

Vamos a decir que sus dos conexiones fueron nombrados "db1" y "db2".

Suministro de un nombre de base de datos a la hora de crear tus criterios de objeto:

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

Hacer tus selecciona, en sus dos clases de base de datos.

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

A continuación, ponerlos juntos de alguna manera...

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

Esto supone una relación 1-1.Usted tendrá que modificar para 1-muchos.

Buena suerte!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top