从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之间的区别吗?
答案 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对象。