使用关系在DBIx :: Class中搜索

时间:2011-08-18 15:09:31

标签: perl dbix-class

我开始学习DBIx :: Class,我对在相关表格中搜索有疑问:

请考虑以下代码:

 my $books = $author->search_related('books', { name => 'Titanic' }); 
 my $books = $author->books->search({name => 'Titanic'});

我想要的只是在$author中搜索作者名为“泰坦尼克号”的书籍 这两个搜索返回相同的结果集?
如果是的话,最好的方法是什么?为什么? 如果不是,有什么区别?

1 个答案:

答案 0 :(得分:6)

search_related是一个Resultset方法。如果你有一个作者的结果集,并且你想得到他们所有名为“泰坦尼克号”的书的结果集,你就会使用它。

my $books = $schema->resultset('Author')->search({ last_name => 'Smith' })
    ->search_related('books', { name => 'Titanic' });

如果$author是一个行对象,代表一行,那么你的第二行就是你如何搜索他的书。

my $books = $author->books->search({ name => 'Titanic' });

行和结果集之间的区别是DBIx :: Class的核心概念之一。您可能需要查看DBIC Manual Intro。 irc.perl.org上的#dbix-class通常很活跃,所以你也可以在那里找到帮助。