Doctrine 1.2 Cross-Database Join

Heute musste ich bei einem Projekt (Symfony 1.4 / Doctrine 1.2) eine komplexe DB-Abfrage mit einem Join zwischen 2 Datenbanken in DQL abbilden.
Die beiden Datenbanken liegen auf dem selben MySql-Server, somit sollte dies kein Problem darstellen.
Meine Überlegung war, das Doctrine anhand der Connection aus der schema.yml das richtige SQL-Statement zusammen stellt. Das hat jedoch nicht funktioniert.

Nach ein wenig Recherche hab ich folgendes gefunden:
http://www.doctrine-project.org/blog/cross-database-joins

Das ist schon mal nicht schlecht. Ich wollte diese Option jedoch nicht global festlegen (wer weiß was sich dadurch alles ändert), sondern nur bei dem Query wo es wirklich gebraucht wird.

hier mein Ansatz:

 // Tabellen Objekt holen
 $o_table = Doctrine_Core::getTable('TabelleA');
 // Tabellen-Namen setzen. Dabei wird als Prefix der DB-Name angehängt
 $o_table->setTableName('db1.tabelle_a');
 // Query erstellen
 $q = $o_table->createQuery('a');

 // Ab hier folgt die ganz normale DQL-Abfrage.
 $q->select('*')->from('TabelleA a');
 $q->leftJoin('a.TabelleB b')
 $q->where('a.id = 10');
 $q->getSqlQuery();

Das Query sollte ungefähr so aussehen:

 SELECT * FROM db1.tabelle_a AS a LEFT JOIN tabelle_b AS b ON a.id = b.tabelle_a_id WHERE a.id = 10;
Dieser Beitrag wurde unter Dorctrine, Symfony 1.4, Tips & Tricks abgelegt und mit verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>