Muita gente tenta criar uma aplicação e se depara com o fato de ter de utilizar mais que um banco de dados ao mesmo tempo.
Uma situação típica : existe um aplicativo ( que não foi você quem fez ) que têm um banco de dados próprio e você não pode alterar os dados dele, somente ler.
Mas ao mesmo tempo você precisa usar esses dados para seu ERP feito em Zend, e não pode alterar o banco de dados do outro aplicativo, pois você precisa de um gerenciamento de usuários do seu ERP por exemplo.
Neste caso, você precisará criar um banco de dados próprio para seu ERP, e trabalhar junto com o banco de dados do outro aplicativo.
Então, vem a pergunta natural : como faço isso no Zend ? A resposta é surpreendentemente simples.
Para este post, considere dois banco de dados : 'db1' e 'db2'. O banco de dados 'db1' é do tipo 'dbtype1' ( onde 'dbtype1' pode ser o mysql, postgres, mssql, etc ) e o 'db2' seria do tipo 'dbtype2'.
No arquivo 'application/configs/application.ini' de seu projeto, configure esses banco de dados assim:
;; application/configs/application.ini ;; Configura o adaptador para 'db1' e o define como o adaptador padrão da aplicação. resources.resourcealias.dbalias1.adapter = pdo_dbtype1 resources.resourcealias.dbalias1.host = host1 resources.resourcealias.dbalias1.username = userdb1 resources.resourcealias.dbalias1.password = passdb1 resources.resourcealias.dbalias1.dbname = db1 resources.resourcealias.dbalias1.default = true ;; Configura o adaptador para 'db2'. resources.resourcealias.dbalias2.adapter = pdo_dbtype2 resources.resourcealias.dbalias2.host = host2 resources.resourcealias.dbalias2.username = userdb2 resources.resourcealias.dbalias2.password = passdb2 resources.resourcealias.dbalias2.dbname = db2 resources.resourcealias.dbalias2.default = false
Aqui devemos notar que 'resourcealias' é um apelido para esse recurso, 'dbalias1' e 'dbalias2' são apelidos para as conexões, 'pdo_dbtype1' e 'pdo_dbtype1' são os tipo de banco de dados, como 'pdo_mysql' para MySQL, 'pdo_pgsql' para PostgreSQL, etc. O resto é auto-explicativo, espero ...
Pois bem, definido a configuração dos bancos de dados, agora abramos o 'Bootstrap.php' e fazemos um 'inicializador':
public function _initDbRegistry(){ $this->bootstrap('resourcealias'); $obj = $this->getPluginResource('resourcealias'); Zend_Registry::set('adapteralias1', $obj->getDb('dbalias1')); Zend_Registry::set('adapteralias2', $obj->getDb('dbalias2')); }
E agora simplesmente, crie seu model e adicione:
class Meumodel1_Model extends Zend_Db_Table_Abstract { protected $_name = 'uma_tabela_qualquer_do_db1'; protected $_adapter = 'adapteralias1'; } class Meumodel2 extends Zend_Db_Table_Abstract { protected $_name = 'uma_tabela_qualquer_do_db2'; protected $_adapter = 'adapteralias2'; }
E está pronto tudo o que você precisa para utilizar dois bancos de dados totalmente diferentes juntos. Definida a classe, você poderá criar os métodos e objetos de seus modelos como sempre utilizou com Zend, inclusive usando relacionamento de tabelas ( fiz um post sobre isso aqui ) sem problemas.
Eeeee até a próxima.
Referências
- Amazium : Using Different Databases with Zend Framework
- Zend Manual : Zend Adapter
- Zend Manual : Available Resource Plugins
Comentários
Postar um comentário