2010-07-25 3 views
3

Для простого случая двух таблиц - Термин и определение - где Термин has_many Определения и определение belongs_to Термин, все термины и соответствующие определения должны быть извлечены и отображены каким-то образом.Извлечение данных из отношения has_many в DBIx :: Class

Вот что я придумал до сих пор:

my $terms= $schema->resultset('Term')->search(undef, { 
    prefetch => 'definitions', 
}); 

while (my $term = $terms->next) { 
    my @terms; 
    push @terms, $term->term; 

    my $definitions = $term->definitions; 
    my @definitions; 
    while (my $definition = $definitions->next) { 
    push @definitions, $definitions; 
    } 
    ... 
} 

Это делает работу, но мне было интересно, если другой, менее crufty подход может быть принят.

ответ

1
my $terms= $schema->resultset('Term')->search(undef, { 
    prefetch => 'definitions', 
}); 

my @terms = $terms->all; 

my @definitions = map $_->definitions->all, @terms; 

Это похоже на то, что вы пытаетесь сделать; Я не могу сказать. Тот факт, что вы создаете новый массив, нажимаете на него, а затем выходите из области видимости, на самом деле не имеет никакого смысла. В любом случае, если я правильно понял, что вы все хотели, был весь метод из DBIx :: Class :: ResultSet.

+0

Массив - это не что иное, как часть этого примера. Метод 'all' - это то, что я действительно хотел. Благодарю. – Stan