[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