2009-05-06 10 views
3

Ich habe 2 Datenbanken, die meine Site verwendet, einschließlich einer zentralen Benutzerdatenbank, die sich auf andere standortspezifische Datenbanken bezieht.Kann ich den Datenbankadapter dauerhaft innerhalb einer Zend_Db_Table_Abstract Klasse verwenden?

Manchmal ist es angemessen, new User(array('db'=>'adapter1')); (aber nie bequem) anzurufen; In anderen Fällen jedoch, beispielsweise wenn Beziehungen zwischen Tabellen in verschiedenen Datenbanken deklariert werden, gibt es keine Möglichkeit, dies zu tun.

Kennt jemand einen Weg zu spezifizieren, welcher Datenbankadapter von innerhalb der Zend_Db_Table_Abstract Klasse benutzt wird?

Danke!

Antwort

4

Anreise nach diesem wieder ziemlich spät, aber keine der Antworten hier recht hat Es für mich. Einige wenige meiner Datenbankmodelle benötigt ‚tdb‘ zu verwenden, und der folgende Code wurde zu jeder dieser Klassen hinzugefügt, um das automatisch geschehen haben:

ich Ihnen allen für Ihre Anregungen auf dem Weg danken!

1

Sie könnten die Klassenvariable $ _db auf den richtigen Adapter im Konstruktor setzen.

global $adapter1; //There are better ways than using a global variable 

$this->_db = $adapter1; 

Angenommen, das Adapterobjekt kann im Konstruktor referenziert werden. Das scheint nicht tragbar zu sein, aber ich glaube, es würde funktionieren.

+3

Wahr - aber benutze Zend_Registry anstelle von globals! –

+1

Ja, natürlich, deshalb habe ich einen Kommentar in den Code geschrieben; es schien jedoch der klarste und einfachste Weg, die Methode zu veranschaulichen. –

3

Zend_Db_Table_Abstract stellt eine statische Methode zum Festlegen des Standard-Datenbankadapters bereit. Gehen Sie dazu wie folgt vor:

Zend_Db_Table_Abstract::setDefaultAdapter($adapter); 

Jetzt werden alle Ihre Tabellenobjekte Ihren Adapter standardmäßig verwenden.

Hinweis: Die Online-Dokumentation manchmal nicht macht dies offensichtlich, so dass Ihr zweiter bester Ort, um hier in der API zu überprüfen: http://framework.zend.com/apidoc/core/

+0

Während die Dokumente manchmal ein wenig vage und verwirrend sind, wird dieses eine gerade erwähnt in den blauen! http://framework.zend.com/manual/en/zend.db.table.html – blockhead

+0

Haha, yeah Ich tendiere dazu, auf die API zu verzichten, bevor ich die Dokumente durchlese. Danke, dass du das aufzeigst :) – stephenminded

+1

Ich glaube, er wollte verschiedene Tabellenklassen auf verschiedene Adapter setzen (er benutzt zwei Adapter). Mein Verständnis ist, dass das Festlegen eines Standardadapters alle Tabellen einen einzigen Adapter verwenden wird. –

1

Die Init-Funktion kann verwendet werden, es wird nicht verwendet in Zend_Db_Adapter_Abstract, kann in Ihrer Klasse verwendet werden, um alles einzurichten, was getan werden muss. _setAdapter akzeptiert eine Zeichenfolge, die einen Registrierungsschlüssel angibt.

public function init() 
{ 
    $this->_setAdapter('tdb'); 
} 
Verwandte Themen