[Cascavel-pm] DBIx::Class - buscando dados de uma tabela de ligação
Donato Azevedo
donatoaz em gmail.com
Segunda Novembro 26 19:20:10 PST 2007
Opa, corrigi um dos erros...
On Nov 27, 2007 12:38 AM, Donato Azevedo <donatoaz em gmail.com> wrote:
> On Nov 26, 2007 11:10 AM, eden <edencardim em gmail.com> wrote:
> >
> > opa, viajei, tem um erro aqui (escrever código no gmail é o fim da picada)
> >
> > sub search_peca {
> > my($self, $attribs) = @_;
> >
> > # $rel = o nome que voce colocou no relacionamento belongs_to
> > entre veiculo_peca e peca
> > my $rel = 'peca';
> > %$attribs = map { "${rel}.${_}" => $attribs->{$_} } keys %$attribs;
> >
> > # pecas_rel = nome do relacionamento has_many entre veiculo e veiculo_pecas
> > return $self->pecas_rel->search($attribs, {join => $rel, prefetch
> > => { $table => [keys %$attribs] } });
> > }
> >
> > agora sim... ;)
>
> tentei implementar esta solucao e esbarrei em diversos erros, e até
> agora nao consegui:
> primeiro, eis a minha funcao:
> sub search_peca_rs {
> my($self, $attribs) = @_;
>
> my $table = $self->veiculo_pecas->result_source->table;
>
> # $rel = o nome que voce colocou no relacionamento belongs_to entre
> veiculo_peca e peca
> my $rel = 'peca';
> %$attribs = map { +"$rel.$_" => $attribs->{$_} } keys(%{$attribs});
>
> # pecas_rel = nome do relacionamento has_many entre veiculo e veiculo_pecas
> return $self->veiculo_pecas->search_rs($attribs, {join => $rel,
> prefetch => { $table => [keys %$attribs] } });
> }
>
> resulta em:
> Can't locate object method "table" via package
> "DBIx::Class::ResultSource::Table" at
> ../../lib/Catalog/Schema/VeiculoEixo.pm line 87.
Este eu nao consegui corrigir
>
> se substituo por
> my $table = 'veiculo_peca';
> a chamada no template:
> [% ve_pecas = ve.search_peca_rs( { 'codigo_peca' => 'cod',
> 'descricao_peca' => 'desc' } ) %]
resolvi este fazendo o seguinte:
sub search_peca_rs {
my($self, $attribs) = @_;
my $table = 'veiculo_peca';
my $rel = 'peca';
%$attribs = map { +"$rel.$_" => $attribs->{$_} } keys(%{$attribs});
return $self->veiculo_pecas->search_rs( $attribs, { 'join' => $rel,
'prefetch' => $rel } );
}
Inté pessoal!
--
Donato Azevedo
Mais detalhes sobre a lista de discussão Cascavel-pm