如何从DBIx :: Class中的链接表中获取值?

时间:2009-08-25 07:35:03

标签: perl dbix-class

在我的应用中,我有2个表格,书籍和标签,以及链接表book_tags。链接表还包含使用此特定标记标记图书的次数。我可以通过

添加标签
$book->add_tag($tag, { tag_count => 10 });

然而,当我检索书籍的标签时

@tags = $book->tags();

它似乎没有返回链接表中的值。

有没有办法从链接表中获取值而不用手工操作?

3 个答案:

答案 0 :(得分:2)

由于您有一个名为book_tags的联接表,因此您必须创建many_to_many表与books has_many关系的books关系表本身。 has_many关系应从表格id中检索与该图书相关联的代码的book_tags个。您可能必须添加类似于以下的关系:

Your::App::Schema::Result::Book

__PACKAGE__->has_many( book_tags => 'Your::App::Schema::Result::BookTag', 'book_id' );

__PACKAGE__->many_to_many( tags => 'book_tags', 'tag' );

Your::App::Schema::Result::BookTag

__PACKAGE__->belongs_to( tag => 'Your::App::Schema::Result::Tag', 'tag_id' );

答案 1 :(得分:1)

您可以通过以下关系proxy属性:

Schema::Tag->has_many('book_tags' => 'Schema::BookTag',  
  undef, {  
    proxy => [ 'tag_count' ],  
  }  
);

然后您可以像这样访问'tag_count':

my $tag_rs = $book->tags;
for( my $tag = $tag_rs->next ){
  print $tag->tag_count;
}

您可以在relationship docs找到更多信息。

答案 2 :(得分:0)

谢谢!我已经完成了这部分,并且它有效。

我的表格如下:

BOOK:

book_id book_title [other fields]

标签:

tag_id tag_name [other fields]

BOOK_TAG:

book_id tag_id tag_count

因此,我在标签和书籍之间存在多对多关系,并附加了属性tag_count,该属性存储在链接表中。

我可以通过

为书籍添加标签
$book->add_to_tags($tag, { tag_count => 10 } );

填充BOOK_TAG表中的tag_count字段。

但是当我做的时候

$book->tags();

它不会自动从BOOK_TAG中检索tag_count字段。我可以写

$tag = $schema->resultset('BookTag')->find( { book_id=>$book->book_id, tag=>$tag->tag_id });
$tag_count = $tag->tag_count();

我正在尝试查看是否有更简单的方法从链接表中获取额外属性。