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

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

最佳答案

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

my @terms = $terms->all;

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

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

关于perl - 从 DBIx::Class 中的 has_many 关系中检索数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3330663/

10-12 18:15