2

在我的应用程序中,我有 2 个表、书籍和标签,以及链接表 book_tags。链接表还包含该书被此特定标签标记的次数。我可以通过添加标签

$book->add_tag($tag, { tag_count => 10 });

但是,当我检索一本书的标签时

@tags = $book->tags();

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

有没有办法从链接表中获取值而无需手动操作?

4

3 回答 3

2

由于您有一个名为 的连接表book_tags,因此您必须创建many_to_manybooks表到表本身的has_many关系的关系。bookshas_many关系应该id从表中检索与书关联的标签的 s 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' );
于 2009-08-25T09:27:40.710 回答
1

You can proxy properties through relationships like this:

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

Then you can access 'tag_count' like this:

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

You can find more at the relationship docs.

于 2009-08-26T03:49:25.433 回答
0

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

我的表如下所示:

书:

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();

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

于 2009-08-25T21:53:42.323 回答