2009-05-06 11 views
3

J'ai deux bases de données que mon site utilise, y compris une base de données centrale d'utilisateurs qui se rapporte à d'autres bases de données spécifiques au site.Puis-je définir l'adaptateur de base de données à utiliser de manière permanente à partir d'une classe Zend_Db_Table_Abstract?

Parfois, il suffit d'appeler new User(array('db'=>'adapter1')); (mais jamais pratique); D'autres fois, cependant, comme lors de la déclaration des relations entre les tables sur différentes bases de données, il n'y a aucun moyen de le faire.

Est-ce que quelqu'un sait comment spécifier l'adaptateur de base de données à utiliser dans la classe Zend_Db_Table_Abstract?

Merci!

Répondre

4

Pour en revenir à cette jolie fin, mais aucune des réponses ici tout a fait pour moi. Quelques privilégiés de mes modèles de base de données nécessaires pour utiliser « TDB » et le code suivant a été ajouté à chacune de ces classes pour que cela se fasse automatiquement:

Je vous remercie tous pour vos suggestions sur le chemin!

1

Vous pouvez définir la variable de classe $ _db sur l'adaptateur correct dans le constructeur.

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

$this->_db = $adapter1; 

En supposant que l'objet adaptateur peut être référencé dans le constructeur. Cela ne semble pas portable, mais je crois que cela fonctionnerait. Zend_Db_Table_Abstract fournit une méthode statique pour définir l'adaptateur de base de données par défaut.

+3

True - mais utilisez Zend_Registry au lieu de globals! –

+1

Oui, bien sûr, c'est pourquoi j'ai mis un commentaire dans le code; cependant, cela semblait la façon la plus claire et la plus simple d'illustrer la méthode. –

3

Procédez comme suit:

Zend_Db_Table_Abstract::setDefaultAdapter($adapter); 

Maintenant, tous vos objets Table utiliseront votre carte par défaut.

Note: les docs en ligne parfois ne font pas évident, donc votre deuxième meilleur endroit pour vérifier est l'API ici: http://framework.zend.com/apidoc/core/

+0

Alors que les docs sont parfois un peu vagues et déroutants, celui-ci arrive à être mentionné dans le bleu! http://framework.zend.com/manual/en/zend.db.table.html – blockhead

+0

Haha, ouais j'ai tendance à m'en remettre à l'API avant de lire les docs. Merci de le signaler :) – stephenminded

+1

Je crois qu'il voulait définir différentes classes de table pour différentes cartes (il utilise deux cartes). Ma compréhension est que la définition d'un adaptateur par défaut fera en sorte que toutes les tables utilisent un seul adaptateur. –

1

La fonction init peut être utilisée, elle n'est pas utilisée dans Zend_Db_Adapter_Abstract, peut être utilisée dans votre classe pour configurer tout ce qui doit être fait. _setAdapter accepte une chaîne nommant une clé de Registre.

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