Moin.
Es existiert eine Haupttabelle 'Artikel', dazu eine 1:n table 'art2att', die Relation heisst 'art2att
s'.
Mit DBIx::Class hole ich mir ein ResultSet aus der Table 'artikel':
my $rs = $schema->resultset('Artikel')->search(
{
'art2atts.id_at' => $aid,
def_attgroup => { IN => \@gids }
},
{
select => ['artnum', 'artname', 'text', ],
prefetch => ['art2atts'],
order_by => 'artnum',
});
So weit, so gut, funktioniert.
Nun will ich auf das Resultset zugreifen. Das Problem besteht beim dereferenzieren eines Feldes der related table 'art2atts'.
Man beachte: '$row->art2atts' ist ein Objekt vom Typ 'DBIx::Class::ResultSet'.
Wenn ich das so mache:
while ( my $row = $rs->next ) {
# Welchen Artikel haben wir denn hier?
say "Artikel: ",$row->artnum," Name: ",$row->artname;
# Welche Attribute hat dieser Artikel?
while ( my $inner_row = $row->art2atts->next() ) {
say "Attribut-Id: ",$inner_row->id;
}
}
dann wird der erste Artikel endlos oft ausgegeben, d.h. $row->art2atts->next() iteriert nicht.
Wenn ich hingegegen dieses innere ResulSet zunächst einer Variablen zuweise (siehe Zeile 6):
while ( my $row = $rs->next ) {
# Welchen Artikel haben wir denn hier?
say "Artikel: ",$row->artnum," Name: ",$row->artname;
# Welche Attribute hat dieser Artikel?
my $irs = $row->art2atts;
while ( my $inner_row = $irs->next() ) {
say "Attribut-Id: ",$inner_row->id;
}
}
dann geht das problemlos und wie gewünscht.
Kann mich jemand erleuchten wo ich hier die Tomaten auf den Augen habe?
Danke.
Britzel