[Cascavel-pm] Class DBI
Nilson Santos Figueiredo Junior
acid06 em gmail.com
Segunda Junho 26 12:05:33 PDT 2006
On 6/26/06, tnas <nascimenthiago em gmail.com> wrote:
> Estou usando a Class::DBI para acessar o MySQL. Porém preciso efetuar
> duas consultas distintas. O problema é que para acessar os métodos da
> classe eu uso a variável __PACKAGE__ e isto está fazendo com que uma
> consulta interfira na outra.
__PACKAGE__ não é uma variável de verdade.
É como se fosse uma constante e ela é sempre igual ao pacote no qual
aquele código foi compilado. Por exemplo:
package Modulo1;
print __PACKAGE__;
Irá imprimir "Modulo1" na saída.
> Mais especificamente, as colunas que eu defino para uma consulta estão
> sendo vistas pela outra consulta.
Sem código fica difícil especular o que está sendo feito de errado.
> Alguém sabe como posso usar a Class::DBI sem utilizar __PACKAGE__?
Provavelmente, você não está utilizando corretamente o módulo.
Normalmente, você utiliza __PACKAGE__ nas classes de definição das
tabelas de bancos de dados. Nas classes onde você acessa esses dados
propriamente ditos, você utilizaria o nome da classe explícito.
O padrão de uso de mapeadores objeto relacional é algo como:
package MyDB::Base;
use base 'Class::DBI';
__PACKAGE__->connection( ... );
package MyDB::Tabela1;
use base 'MyDB::Base';
__PACKAGE__->table('tabela1');
# etc
package main;
MyDB::Tabela1->find( ... );
Note que a utilização do Class::DBI não é recomendada hoje em dia.
Atualmente existe um mapeador objeto relacional que é mais avançado
tanto em recursos quanto em performance, além de ser ativamente
mantido que é o DBIx::Class.
-Nilson Santos F. Jr.
Mais detalhes sobre a lista de discussão Cascavel-pm