Использование отношений для поиска в DBIx :: Class - PullRequest
2 голосов
/ 18 августа 2011

Я начинаю изучать DBIx :: Class, и у меня есть сомнения в поиске в связанной таблице:

Рассмотрим следующий код:

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

Я хочу только поискдля книг под названием «Титаник» автора в $author.
Эти два поиска возвращают один и тот же набор результатов?
Если да, каков наилучший способ и почему?
Если нет, в чем разница?

1 Ответ

6 голосов
/ 18 августа 2011

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 . # dbix-class на irc.perl.org, как правило, довольно активен, поэтому вы также можете найти там помощь.

...