[Cascavel-pm] En:Class::DBI relationships
André Garcia Carneiro
andre.garcia.carneir em terra.com.br
Sexta Outubro 13 06:17:16 PDT 2006
Olá Monges!
Venho a vocês mais uma vez humildemente buscar conhecimento.
Estou tentando resolver um problema de relacionamentos com o Class::DBI. Aparentemente, não há erros, mas o
objeto da minha pesquisa retorna sem dados, e eu não faço idéia do porque. O código segue abaixo:
sub check_volunteer_exists
{
my $parameters = shift;
package VOLUNTEER::DBI;
use CGI;
use base 'Class::DBI';
package VOLUNTEER::Volunteer;
use base 'VOLUNTEER::DBI';
my $sconf = new SiteConfig;
my $dsn = "DBI:".$sconf->dbdriver.":database=".$sconf->database.";host=".$sconf->dbhost;
VOLUNTEER::DBI->connection($dsn,$sconf->dbuser,$sconf->dbpasswd,{RaiseError=>1,AutoCommit=>0});
VOLUNTEER::Volunteer->table('VOLUNTARIO');
VOLUNTEER::Volunteer->columns( All => qw/ NOME ID_VOLUNTARIO /);
package VOLUNTEER::PessoaFisica;
use base 'VOLUNTEER::Volunteer';
VOLUNTEER::PessoaFisica->table('PESSOA_FISICA');
VOLUNTEER::PessoaFisica->columns( All => qw/ NR_IDENTIDADE ID_VOLUNTARIO/);
VOLUNTEER::PessoaFisica->has_a(ID_VOLUNTARIO => 'VOLUNTEER::Volunteer'); #Teoricamente, isso deveria resolver
o relacionamento.
my $data = VOLUNTEER::PessoaFisica->search(NOME => $parameters->{name}, NR_IDENTIDADE => $parameters->{rg});
use Data::Dumper;
print STDERR Dumper $data;
while(my $result = $data->next)
{
if ($result->NOME && $result->NR_IDENTIDADE)
{
return 1;
}
}
return 0;
}
Volunteer e Pessoa física são objetos que representam as tabelas, respectivamente, VOLUNTARIO e PESSOA_FISICA,
e estão em um banco de dados(mysql, por enquanto, mas vão pro ORACLE9i em breve), que tem um relacionamento de
1 para 1. O campo que liga os dois chama-se ID_VOLUNTARIO, e existe nas duas tabelas(óbvio, só pra não parecer
tão noobie).
Usando o Data::Dumper no objeto $data, obtive o seguinte:
$VAR1 = bless( {
'_data' => [],
'_place' => 0,
'_mapper' => [],
'_class' => 'VOLUNTEER::PessoaFisica'
}, 'Class::DBI::Iterator' );
Ele deveria ter dados em _data, mas vem vazio. Preciso disso para verificar voluntários que possivelmente já
estejam cadastrados no banco de dados.
Para chegar nesse código, consultei o manual do Class::DBI, e não consegui resultado, por isso estou apelando a
vocês. Parecço meio desesperado, não acham??? :) - E estou mesmo :(
Não quero "apelar feio" e voltar usar DBI apenas, para resolver o problema. Gostaria de usar o Class::DBI.
Se alguém tiver alguma idéia, por favor não deixem de escrever, por favor.
De qualquer forma, fico agradecido.
Cheers!
--
André Garcia Carneiro
Developer(Perl/PHP)
Member of "São Paulo Perl Mongers" - http://sao-paulo.pm.org
--
André Garcia Carneiro
Developer(Perl/PHP)
Member of "São Paulo Perl Mongers" - http://sao-paulo.pm.org
Mais detalhes sobre a lista de discussão Cascavel-pm