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

オブジェクトとResultSetの違いを誰かが説明できますか?

4

2 に答える 2

5

new警告は、ResultSetオブジェクトとResultSetクラス名の呼び出しの違いに関するものです。ResultSetコンストラクターを使用して新しいResultSetオブジェクトを作成する場合はnew、ResultSetパッケージを呼び出します。

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

(通常、この方法でResultSetオブジェクトを作成する必要はありません。)newResultSetオブジェクトを呼び出すと、新しいResultSetオブジェクトではなく、対応する結果(行)オブジェクトが取得されます。

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

new他の多くのPerlクラスは、クラス名で呼び出されてもクラスのオブジェクトで呼び出されても違いがないため、警告が表示されます。

于 2013-03-25T22:47:12.317 に答える
1

DBIx :: Class :: ResultSetドキュメントから取得:

DBIx :: Class::ResultSet-一連の結果をフェッチするために使用されるクエリを表します。ResultSetは、クエリを表す一連の条件を格納するオブジェクトです。

ResultSetは、クエリを表す特定のオブジェクトです。オブジェクト(ResultSetオブジェクトではない)は、DBIxで定義されたテーブルからの単一のエンティティです。

1対多の父親と息子のDBがあるとします(各父親は多くの息子を持つことができます)。したがって、DBIxコンテキストのシングルファーザーはオブジェクトであり、息子もオブジェクトです。しかし、「どの父親にJamesという名前の息子がいる」というクエリはResultSetオブジェクトです。

于 2013-03-25T22:48:30.513 に答える