[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