ResultSet和对象之间有什么区别?

时间:2013-03-25 21:56:18

标签: perl resultset dbix-class

DBIx::Class::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之间的区别吗?

2 个答案:

答案 0 :(得分:5)

警告是关于在ResultSet 对象上调用new与ResultSet 类名之间的区别。如果要使用ResultSet构造函数创建新的ResultSet对象,请在ResultSet包上调用new

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

(尽管您通常不必以这种方式创建ResultSet对象。)如果在ResultSet对象上调用new,则不会获得新的ResultSet对象,而是获得相应的结果(行)对象:

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

许多其他Perl类在类名或类的对象上调用new没有区别,因此警告。

答案 1 :(得分:1)

取自DBIx :: Class :: ResultSet docs:

  

DBIx :: Class :: ResultSet - 表示用于获取一组结果的查询。 ResultSet是一个对象,它存储一组表示查询的条件。

ResultSet是表示查询的特定对象。对象(不是ResultSet对象)是DBIx中定义的表中的单个实体。

假设你有一个父亲和儿子的数据库,一对多(每个父亲可以有很多儿子)。因此,DBIx上下文中的单个父亲是一个对象,儿子也是如此。但是查询“哪个父亲有一个名叫詹姆斯的儿子”是一个ResultSet对象。