segunda-feira, 25 de julho de 2011

Conectar a duas Bases de Dados Symfony

Ola pessoal, peço desculpa aos visitantes por ficar um tempo sem postar, mas o trabalho ta puxado.
Mas vamos ao que interessa.

Verifiquei que existem muitas pessoas consultando referencias sobre como conectar a dois ou mais bancos simultâneos com o Symfony, então vai lá um exemplo:

No arquivo config/databases.yml você deve colocar as configurações de seus bancos como no exemplo abaixo.


all:
  auxiliar:
    class: sfDoctrineDatabase
    param:
      dsn: 'mysql:host=localhost;dbname=banco1'
      username: root
      password: null
  principal:
    class: sfDoctrineDatabase
    param:
      dsn: 'mysql:host=localhost;dbname=banco2'
      username: root
      password: null

OBS: A conexão que ficar por ultimo no caso "principal" é levada como base para plugins que necessitam conectar no banco como por exemplo o sfDoctrineGuardPlugin.

Pronto já está configurado a conexão, agora vamos configurar as classes de modelo.
Para uma configuração automática abra o arquivo config/doctrine/schema.yml

E para cada classe existe um atributo chamado connection:  que seguindo o exemplo de configuração acima segue o exmplo abaixo:


Cep:
  connection: auxiliar
  tableName: cep
  columns:
    id:
      type: string(10)
      fixed: false
      unsigned: false
      primary: true
      notnull: false
      autoincrement: false
    rua:
      type: blob()
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    bairro:
      type: blob()
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false




Pessoa:
  connection: principal
  tableName: pessoal
  columns:
    id: 
      type: integer(10)
      fixed: false
      unsigned: false
      primary: true
      notnull: false
      autoincrement: false
    nome: 
      type: blob()
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    idade: 
      type: integer(3)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false  



e assim por diante, cada classe acessando seu banco.

Para deixar rodando em seu sistema é necessário limpar o cache  php symfony cc e depois doctrine:build-model.

Abraço a todos.