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

nsb*_*sbm 2 perl dbix-class

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

请考虑以下代码:

 my $books = $author->search_related('books', { name => 'Titanic' }); 
 my $books = $author->books->search({name => 'Titanic'});
Run Code Online (Sandbox Code Playgroud)

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

wes*_*wes 6

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

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

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

my $books = $author->books->search({ name => 'Titanic' });
Run Code Online (Sandbox Code Playgroud)

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