[Dbix-class] Prefetching multiple has_many relationships

Jonas Alves jonas.alves at gmail.com
Fri Oct 6 20:10:50 CEST 2006


Hello,
When I try to prefetch two has_many relationships i get an error saying:
"Prefetch not supported with accessor 'multi'". But if i try each one
individualy all gets well.

Here are my Noticia.pm relationships:

__PACKAGE__->has_many(
  assinaturas => 'Clix::Kiado::Schema::not_noticia_assinatura', 'noticia_id'
);
__PACKAGE__->has_many(
 comentarios => 'Clix::Kiado::Schema::Comentario',  'noticia_id'
);


When i do this query:

my $rs = $schema->resultset('Noticia')->search(
    { 'me.id' => 95 }, {
       prefetch  => [qw/assinaturas/],
       rows => 10,
    }
);

I get the following SELECT:

SELECT me.id, assinaturas.noticia_id, assinaturas.assinatura,
assinaturas.comentario, assinaturas.local, assinaturas.prioridade,
assinaturas.apagado FROM not_noticia me LEFT JOIN
not_noticia_assinatura assinaturas ON ( assinaturas.noticia_id = me.id
) WHERE ( me.apagado = ? AND me.id = ? ) ORDER BY me.data_criacao
DESC, assinaturas.noticia_id LIMIT 10: '0', '95'

If i try to prefetch to prefetch 'comentarios' instead the query is
retrieved too.
But if i change the prefetch to => [qw/assinaturas comentarios/]
I get the error:

SELECT me.id, assinaturas.noticia_id, assinaturas.assinatura,
assinaturas.comentario, assinaturas.local, assinaturas.prioridade,
assinaturas.apagado, comentarios.id, comentarios.noticia_id,
comentarios.seccao_id, comentarios.autor, comentarios.email,
comentarios.residencia, comentarios.data_insercao,
comentarios.data_aprovacao, comentarios.user_aprovacao,
comentarios.ver_email, comentarios.ver_autor,
comentarios.classificacao, comentarios.estado_id, comentarios.apagado
FROM not_noticia me LEFT JOIN not_noticia_assinatura assinaturas ON (
assinaturas.noticia_id = me.id ) LEFT JOIN not_comentario comentarios
ON ( comentarios.noticia_id = me.id ) WHERE ( me.apagado = ? AND me.id
= ? ) ORDER BY me.data_criacao DESC, assinaturas.noticia_id,
comentarios.noticia_id LIMIT 10: '0', '95'
DBIx::Class::ResultSet::next(): Prefetch not supported with accessor
'multi' at testes/teste_schema4.pl line 40

Am I doing something wrong, or is this a bug?

-- 
Jonas Alves



More information about the Dbix-class mailing list