Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjours a tous.
Je suis tous nouveau sur zend framework, je débarque de cakePHP, qui a fini par me décevoir.
Donc j'ai suivi plusieurs formation pour la mise a niveau.
Mais ces formation ne montré pas comment gérer plusieurs bases de données.
J'ai vue plusieurs tuto sur votre forum sur la gestion de plusieurs DB, mais étant vraiment novice je ne suis pas en mesure de comprendre.
Pourriez vous s'il vous plait, m'expliquer comment gerer plusieurs base de donné et comment switcher entre elle ?
je vous remercie, dans l'attente d'une réponse.
Hors ligne
Tu devrais pouvoir trouver ton bonheur aux exemples #8 à #10 de la documentation.
En gros, il te faut construire un adaptateur par connexion dont tu as besoin (#8), puis de les stocker dans le registre, pour qu'elles soient facilement accessibles par tes classes (#10), et tu peux éventuellement déclarer une de tes connexions comme connexion par défaut (#9).
Hors ligne
Merci de votre aide.
J'ai une question... cette classe faut la creer ou ?
class Bugs extends Zend_Db_Table_Abstract { protected $_name = 'bugs'; }
Hors ligne
Heu ça c'est pour l'exemple tu dois la créer nul part cette classe. Sinon ce serait dans ton dossier Model.
Hors ligne
Merci.
Ensuite il y a un problème.
J'alterne entre mysql et mssql et en lisant la doc il me semble qu'on ne puisse pas alterner de type de DB.
Ai je faux ?
Et comment y remédier ?
Hors ligne
thebarbarius a écrit:
Merci.
Ensuite il y a un problème.
J'alterne entre mysql et mssql et en lisant la doc il me semble qu'on ne puisse pas alterner de type de DB.
Ai je faux ?
Et comment y remédier ?
Ben si, tu peux !
C'est ce que je t'ai expliqué : tu crées tes N connexions, tu les déclares toutes dans Zend_Registry (avec un nom bien distinct) et tu fais appel à l'une ou l'autre depuis n'importe quel endroit de ton code, avec quelque chose comme ceci :
[lang=php] // Enregistrement de l'adaptateur pour les connexions vers MySQL $db = Zend_Db::factory('PDO_MYSQL', $options); Zend_Registry::set('mysql', $db); // Ailleurs dans ton code $db_mysql = Zend_Registry::get('mysql' ); //$db_mysql est de type 'Zend_Db_Adapter_Abstract'
Hors ligne
Merci.
Moi j'ai plutot un code qui ressemble a sa dans index.php
$mssql = Zend_Db::factory($config->database->mssql->adapter,array( 'host' => $config->database->mssql->params->host, 'username' => $config->database->mssql->params->username, 'password' => $config->database->mssql->params->password, 'dbname' => $config->database->mssql->params->dbname, ) ); $mysql = Zend_Db::factory($config->database->mysql->adapter,array( 'host' => $config->database->mysql->params->host, 'username' => $config->database->mysql->params->username, 'password' => $config->database->mysql->params->password, 'dbname' => $config->database->mysql->params->dbname, ) ); // placons la connexion dans un registre global à l'application $registry = Zend_Registry::getInstance(); $registry->set('mssql', $mssql); // Tentative de configuration -> a verifié $mysql = Zend_Registry::getInstance(); $mysql->set('mysql', $mysql);
Donc ma connexion principale est mssql et la secondaire mysql.
Je sais pas si j'ai bien fait.
Comment je fais dans le model pour switcher de DB ?
Hors ligne
C'est presque bon.
Personnellement, j'aurais plutôt fait ça, pour la fin :
[lang=php] // placons la connexion dans un registre global à l'application $registry = Zend_Registry::getInstance(); $registry->set('mssql', $mssql); Zend_Db_Table_Abstract::setDefaultAdapter( $mssql ); $registry->set('mysql', $mysql);
Dans ce cas, tu n'auras rien à faire pour les requêtes destinées à 'mssql'. Par contre, pour celles destinées à 'mysql', tu devras faire ceci :
[lang=php] $mysql = Zend_Registry::get( 'mysql' ); $mysql->fetchAll(); // Exemple de requête
Hors ligne