IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Db PHP Discussion :

Utiliser deux base de données avec ZF


Sujet :

Zend_Db PHP

  1. #1
    Membre habitué Avatar de kanzarih
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Novembre 2002
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2002
    Messages : 327
    Points : 197
    Points
    197
    Par défaut Utiliser deux base de données avec ZF
    Bonsoir,
    après une dure journée de recherche sur le net et de tentatives, je ne trouve pas comment on peut utiliser deux base de données avec zend! il y a un tutorial sur internet qui explique une méthode :

    Fichier index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    ...
    $databases = new Zend_Config_Ini('core/config/config.ini', 'DATABASES');
    $dbAdapters = array();
     
     
    foreach($databases->db as $config_name => $db){
    	$dbAdapters[$config_name] = Zend_Db::factory($db->adapter,$db->config->toArray());
    	if((boolean)$db->default){
    		Zend_Db_Table::setDefaultAdapter($dbAdapters[$config_name]);
    	}
    }
     
    Zend_Registry::set('dbAdapters', $dbAdapters);
    ....
    mais ça génère cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Uncaught exception 'Zend_Db_Exception' with message 'Adapter name must be specified in a string' in C:\Program Files\EasyPHP 3.0\www\Farkess\lib\Zend\Db.php:227 Stack trace: #0 C:\Program Files\EasyPHP 3.0\www\Farkess\index.php(28): Zend_Db::factory(NULL, Array) #1 {main} thrown in C:\Program Files\EasyPHP 3.0\www\Farkess\lib\Zend\Db.php on line 227
    alors une aide me semble nécessaire

    merci

  2. #2
    En attente de confirmation mail

    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2003
    Messages : 253
    Points : 637
    Points
    637
    Par défaut
    Il faudrait voir ton fichier INI (en masquant les champs confidentiels évidemment ), il y a de fortes chances que $db->adapter soit pas une string mais un objet Zend_Config. A tout hasard, as-tu essayé de passer (string)$db->adapter comme premier argument ?

  3. #3
    Membre habitué Avatar de kanzarih
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Novembre 2002
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2002
    Messages : 327
    Points : 197
    Points
    197
    Par défaut
    bonjour,

    en fait le problème venait de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    $dbAdapters = array();
    ...
    l'idée de tuto que je suivait est de crée un tableau d'adapter et de mettre dedans tous les connections au base de données. mais l'erreur est logique puisque elle indique que 'Adapter name' doit être un string.

    bon voila une question :

    - comment utiliser deux bases de données dans une même application?

    évidement il y a ceux qui vont me dire "mais crée deux adapter !" oui c'est logique mais dans le bootstrap il y a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    $db = Zend_Db::factory($config->db);
    Zend_Db_Table::setDefaultAdapter($db);
    ...
    après on vas faire une classe qui étend Zend_Db_Table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class Albums extends Zend_Db_Table
    {
        protected $_name = 'albums';
    }

    dans le cas d'une base tous vas bien mais pour deux bases comment on créant deux adapter pouvoir crée les classes pour chaque tables des deux bases?

    il ya une idée qu'une personne m'as envoyer est de sauvegarder les adapter dans le registre (bonne idées!) quoi que, comment crée les classe des tableaux des deux bases? !

    bon voila est ce que quelqu'un peut m'indiquer ou trouver des tuto ou m'aider a résoudre ce problème?

    Merci

  4. #4
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Il est possible de préciser l'adaptateur à utiliser en le passant en paramètre au constructeur de Zend_Db_Table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $albums = new Albums(array('db' => $adapter));
    Tu peut aussi préciser à Zend_db_Table d'aller chercher un adaptateur stocké dans le registre : http://framework.zend.com/manual/fr/...cting.registry

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/12/2013, 09h26
  2. utilisation de base de donnée avec JSF
    Par kedare dans le forum JSF
    Réponses: 1
    Dernier message: 16/05/2006, 17h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo