Извлечение данных из отношения has_many в DBIx :: Class - PullRequest
3 голосов
/ 25 июля 2010

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

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

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;
  }
  ...
}

Он выполняет свою работу, но мне было интересно, можно ли использовать другой, менее грубый подход.

Ответы [ 2 ]

1 голос
/ 31 июля 2010
my $terms= $schema->resultset('Term')->search(undef, {  
  prefetch => 'definitions',  
});  

my @terms = $terms->all;

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

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

1 голос
/ 26 июля 2010
...