[Cascavel-pm] DBIx::Class - buscando dados de uma tabela de ligação

Donato Azevedo donatoaz em gmail.com
Segunda Novembro 26 18:38:25 PST 2007


On Nov 26, 2007 11:10 AM, eden <edencardim em gmail.com> wrote:
> On Nov 26, 2007 9:54 AM, eden <edencardim em gmail.com> wrote:
> > sub search_peca {
> >     my($self, $attribs) = @_;
> >     my $table = $self->pecas_rel->result_source->table;
> >     %$attribs = map { "${table}.${_}" => $attribs->{$_} } keys %$attribs;
> >     return $self->pecas_rel->search($attribs, {join => $table,
> > prefetch => { $table => [keys %$attribs] } })
> > }
>
> 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.

se substituo por
my $table = 'veiculo_peca';
a chamada no template:
[% ve_pecas = ve.search_peca_rs( { 'codigo_peca' => 'cod',
'descricao_peca' => 'desc' } ) %]

resulta em:
undef error - DBIx::Class::ResultSet::next(): No such relationship
veiculo_peca at ../../template/veiculo_eixo/veiculo_eixo_table.tt line
58

e eu agarrei aqui..

abraços!

--
Donato Azevedo


Mais detalhes sobre a lista de discussão Cascavel-pm