3

2つのテーブル(用語と定義)の単純なケースを考えると、用語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が役に立ちます。たとえば、関連オブジェクト全体を参照してください。

于 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 に答える