3

给定两个表的简单案例 - 术语和定义 - 其中术语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;
  }
  ...
}

它可以完成这项工作,但我想知道是否可以采取一种不同的、不那么笨拙的方法。

4

2 回答 2

1

DBIx::Class::Manual::Joining应该会有所帮助。例如,参见Whole related objects

于 2010-07-25T20:09:59.317 回答
1
my $terms= $schema->resultset('Term')->search(undef, {  
  prefetch => 'definitions',  
});  

my @terms = $terms->all;

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

这看起来像您正在尝试做的事情;我真的说不出来。您创建一个新数组,推入它,然后让它超出范围这一事实根本没有任何意义。无论如何,如果我理解正确的话,你想要的只是 DBIx::Class::ResultSet 中的 all 方法。

于 2010-07-31T15:32:48.623 回答