2013-03-25 2 views
2

С DBIx::Class::ResultSet мы читаем, что:В чем разница между ResultSet и объектом?

WARNING 
If called on an object, proxies to "new_result" instead, so 
my $cd = $schema->resultset('CD')->new({ title => 'Spoon' }); 
will return a CD object, not a ResultSet, and is equivalent to: 
my $cd = $schema->resultset('CD')->new_result({ title => 'Spoon' }); 

Может кто-нибудь объяснить, что различия между объектом и ResultSet?

ответ

5

Предупреждение о разнице между вызовом new на ResultSet объект и имя ResultSet класса. Если вы хотите создать новый объект ResultSet с помощью конструктора ResultSet, вызовите new на упаковке ResultSet:

my $resultset = DBIx::Class::ResultSet->new(...); 

(Хотя, как правило, не должны создавать ResultSet объекты таким образом.) Если вы звоните new на ResultSet объекта, вы не получите новый объект ResultSet но соответствующий результат (строки) объект:

my $row = $resultset->new(...); 

многих других классов Perl не различает ли new называется по имени класса или объект класса, следовательно, предупреждение.

1

Взятые из DBIx :: Class :: ResultSet документы:

DBIx :: Class :: ResultSet - Представляет запрос, используемый для извлечения набора результатов. ResultSet - это объект, в котором хранится набор условий, представляющих запрос.

ResultSet - это особый объект, представляющий запрос. Объект (а не объект ResultSet) представляет собой единый объект из таблиц, определенных в DBIx.

Допустим, у вас есть БД отцов и сыновей, от одного до многих (у каждого отца может быть много сыновей). Таким образом, единственный отец в контексте DBIx - это объект, а также сын. Но запрос «отец которого имеет сына по имени Джеймс» - это объект ResultSet.

Смежные вопросы