2

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' });

有人可以解释对象和结果集之间的区别吗?

4

2 回答 2

5

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

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

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

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

许多其他 Perl 类无论new是在类名还是类的对象上调用都没有区别,因此会发出警告。

于 2013-03-25T22:47:12.317 回答
1

取自 DBIx::Class::ResultSet 文档:

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

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

假设您有一个父子数据库,一对多(每个父亲可以有很多儿子)。因此,在 DBIx 上下文中,一个父亲是一个对象,儿子也是一个对象。但是查询“哪个父亲有一个儿子叫 James”是一个 ResultSet 对象。

于 2013-03-25T22:48:30.513 回答