Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 11-03-2008 11:30:06

allfab
Membre
Date d'inscription: 02-10-2007
Messages: 40

[Zend_Db][1.0.4] Mapping sur 2 BDD -> Mysql et Postgresql(Postgis)

Bonjour,

Dans le cadre d'une développement d'une application orienteé Webmapping, j'ai besoin de me connecter à une base postgresql. Jusque là, je n'ai pas de problème, j'ai développé mon bootstrap de manière à ce qu'il se connecte à mysql et postgresql au chargement de l'appli. Mon application se divise en module et je gère mes utilisateurs via une base mysql. Le module "webgis", quant à lui, doit pouvoir ce mapper avec postgresql (postgis).

Dans mon bootstap, je me connecte au base de cette façon :

Code:

//ON CHARGE LA CONFIGURATION A L'ACCES DE LA BDD mysql
$Myconfig = new Zend_Config_Ini('./applications/config.ini', 'Mydatabase');
$registry = Zend_Registry::getInstance();
$registry->set('Myconfig', $Myconfig);
//ON CHARGE LA CONFIGURATION A L'ACCES DE LA BDD pgsql
$Pgconfig = new Zend_Config_Ini('./applications/config.ini', 'Pgdatabase');
$registry = Zend_Registry::getInstance();
$registry->set('Pgconfig', $Pgconfig);

//CONNEXION A LA BASE MYSQL et PGSQL
$dbMy = Zend_Db::factory($Myconfig->db->adapter, $Myconfig->db->config->toarray());
$dbPg = Zend_Db::factory($Pgconfig->db->adapter, $Pgconfig->db->config->toarray());
Zend_Db_Table::setDefaultAdapter($dbMy,$dbPg);
Zend_Registry::set('dbMy', $dbMy);
Zend_Registry::set('dbPg', $dbPg);
//ACTIVATION DU PROFILER POUR MYSQL
$dbMy->getProfiler()->setEnabled(true);
try 
{
    $dbMy->getConnection();
} 
catch (Zend_Db_Adapter_Exception $e)
    {
    echo $e->getMessage();
    }
//ACTIVATION DU PROFILER POUR PGSQL
$dbPg->getProfiler()->setEnabled(true);
try 
{
    $dbPg->getConnection();
} 
catch (Zend_Db_Adapter_Exception $e)
    {
    echo $e->getMessage();
    }

Je mappe ainsi mes tables sous mysql de cette façon :

Code:

class User_Table extends Zend_Db_Table_Abstract
{
    /*
    * @nom table sql correspondante
    */
    protected $_name = "zf_users";
....etc

Ce mapping fonction très bien puisque il récupère par défaut la connexion à mysql.

Par contre, lorsque j'essaie de me mapper à une table postgresql, le framework recherche une table qui se trouverait dans ma BDD Mysql. Je n'arrive pas à déclarer à ma classe Map_Table qu'elle devrait se connecter à postgresql et non pas à mysql. J'ai bien ajouter l'objet $dbPg à Zend_Db_Table::setDefaultAdapter($dbMy,$dbPg); dans mon bootstrap mais j'ai toujours cette erreur :

Code:

Fatal error: Uncaught exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'zfvienna.parcelles' doesn't exist' in /Web/ZF/vienna/library/Zend/Db/Statement/Pdo.php:227 Stack trace: #0

qui me confirme que ZF ne cherche pas la table dans la bonne BDD.

Si quelqu'un a rencontré le même genre de problème ou la solution vous paraît évidente, je serai ravi d'en profiter !!

Merci et bonne journée

Hors ligne

 

#2 11-03-2008 11:43:07

allfab
Membre
Date d'inscription: 02-10-2007
Messages: 40

Re: [Zend_Db][1.0.4] Mapping sur 2 BDD -> Mysql et Postgresql(Postgis)

Ben, je me réponds à moi-même !!

J'ai enfin trouvé, je cherche depuis 9h et c'était sous mes yeux....ou dans le code !!

Voilà la solution.

Comme, j'ai mis mes connexions dans le registre Zend, j'ai récupéré celle qui m'intéressait, c'est-à-dire, celle à postgresql puis j'ai effectué un petit "__construct()" pour changer la connexion par défaut de la classe Map_Table :

Code:

<?php
class Map_Table extends Zend_Db_Table_Abstract
{
    
    protected $_primary = "gid";

    protected $_schema = '544PLU';

    protected $_name = "parcelles";

    protected $parcelle;

    function __construct()
    {
        $dbPg = Zend_Registry::get('dbPg');
        $this->_db = $dbPg;
    }
    
    function getParcelles()
    {
        $this->parcelle = $this->_db->fetchRow("SELECT the_geom FROM parcelles WHERE ident ='AB 1'");
        return $this->parcelle;
    }
    
}
?>

Si vous voyez d'autres solutions, je suis également preneur, j'ai vu aussi cette petite fonction en trainant dans la doc " _setupDatabaseAdapter()" que l'on doit pouvoir adapter !

Dernière modification par allfab (11-03-2008 11:53:42)

Hors ligne

 

#3 11-03-2008 11:57:17

nicolas.sitbon
Nouveau membre
Date d'inscription: 07-03-2008
Messages: 6

Re: [Zend_Db][1.0.4] Mapping sur 2 BDD -> Mysql et Postgresql(Postgis)

allfab a écrit:

Code:

Zend_Db_Table::setDefaultAdapter($dbMy,$dbPg);

impossible :

Code:

public static final function setDefaultAdapter($db = null)
    {
        self::$_defaultDb = self::_setupAdapter($db);
    }

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages