2011-08-18 39 views
2

我開始學習DBIx ::類和我在相關表中查找一個疑問:使用關係,DBIx搜索::

考慮下面的代碼:

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

我想要的只是作者在$author中搜索名爲「泰坦尼克號」的書籍。
這兩個搜索返回相同的結果集?
如果是,那麼最好的方法是什麼?爲什麼?
如果不是,有什麼區別?

回答

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通常很活躍,所以你也可以在那裏找到幫助。