[SP-pm] DBIx::Class - Problema com related data

eutsiv :: Geovanny Junio geovanny at eutsiv.com.br
Tue Mar 16 05:30:07 PDT 2010


2010/3/15 Nilson Santos Figueiredo Jr. <acid06 at gmail.com>

> Se eu entendi direito, um erro que (acredito eu) todos que já
> desenvolveram com Catalyst + DBIC + TT cometeram pelo menos uma vez.
>
> O TT avalia tudo em contexto lista, por isso está "funcionando". Se
> você substituir o código TT, adicionando _rs ao final do método,
> provavelmente vai deixar de ter o resultado correto:
>
>  [% teste.locations_translations_rs.coluna_exemplo %]
>
> O que acontece é que as relações do tipo has_many (que eu imagino que
> $trow->locations_translations seja) retornam um objeto resultset, que
> representa um conjunto de rows. As colunas estão nos objetos rows e
> não no resulset.
> O que você fazer em seu código Perl é o seguinte:
>
> foreach my $trow (@temp) {
>    $c->log->debug($trow->id); # acesso a colunas da tabela principal
> funciona
>     my $translations = $trow->locations_translations;
>    for my $translation ($translations->all) {
>        $c->log->debug($translation->coluna_exemplo);  # agora deve
> funcionar
>    }
> }
>
>
Sim Nilson, agora funcionou.



> Se você realmente quiser apenas os valores das múltiplas colunas de um
> resultset, utilize o método get_column() - mas provavelmente não é o
> que você quer.
>
> Espero que tenha ficado claro.
>
>
Ficou claro sim, e foi de muita ajuda.

Obrigado,



> -Nilson
>
>
> 2010/3/15 eutsiv :: Geovanny Junio <geovanny at eutsiv.com.br>:
> > Olá Companheiros, tudo bem?
> >
> > Não estou conseguindo resolver um problema com DBIx::Class, com certeza é
> > uma cagada muito grande minha, mas apesar de grande ainda não consegui
> > enxergar.
> > O código é o seguinte:
> >
> > my $rs = $c->model('UaiGo::Location');
> > my @temp = $rs->search(undef, { prefetch => 'location_translations',
> > order_by => { -asc => 'name' } })->all();
> >
> > foreach my $trow (@temp) {
> >     $c->log->debug($trow->id); # acesso a colunas da tabela principal
> > funciona
> >     $c->log->debug($trow->locations_translations->coluna_exemplo);  #
> acesso
> > a colunas da tabela do join não funciona, isso dá o erro: can't locate
> > method coluna_exemplo.....
> > }
> >
> > $c->stash->{location} = \@temp;
> >
> > A linha que coloquei de debug, gera um erro, alegando que o método
> > coluna_exemplo não existe. Mas o interessante, é que pelo Template
> funciona:
> >
> > [% FOREACH teste IN c.stash.location %]
> >     [% teste.locations_translations.coluna_exemplo %] # Imprime o
> conteúdo
> > da coluna corretamente
> > [% END %]
> >
> > Com certeza estou cometendo algum erro infantil, mas já li a documentação
> e
> > o cookbook do DBIx::Class e não consegui resolver.
> >
> > Grato,
> >
> > --
> > Geovanny Junio
> > Consultor de Tecnologia
> > geovanny (at) eutsiv.com.br
> > +55 31 9422-8885
> > +55 31 3393-9132
> > www.eutsiv.com.br
> >
> > Este e-mail pode conter informação privilegiada e confidencial. Se você
> não
> > é destinatário da
> > mensagem, por favor apague a mensagem e comunique-nos o fato de imediato.
> >
> > This e-mail contains information that may be
> > privileged and confidential. If you are not the intended recipient,
> please
> > delete the e-mail and notify us immediately.
> >
> > _______________________________________________
> > SaoPaulo-pm mailing list
> > SaoPaulo-pm at pm.org
> > http://mail.pm.org/mailman/listinfo/saopaulo-pm
> >
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm at pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20100316/a2e51419/attachment.html>


More information about the SaoPaulo-pm mailing list