DBIx::Class::ResultSetManager never left experimental status and has now been DEPRECATED. This module will be deleted in 09000 so please migrate any and all code using it to explicit resultset classes using either __PACKAGE__->resultset_class(...) calls or by switching from using DBIx::Class::Schema->load_classes() to load_namespaces() and creating appropriate My::Schema::ResultSet::* classes for it to pick up.";
以前にも書きましたが、何かと問題ありつつもResultSetに簡単にメソッドをはやせるので便利だったDBIx::Class::ResultSetManagerです。
が、このたび0.09000からは削除されることになりました。
なので、その代替案が必要なのですが、基本的には以下のようにするのがよろしいようです。
use strict;
use warnings;
{
package My::ResultSet::Users;
use base qw/DBIx::Class::ResultSet/;
sub search_ordered_desc {
my $self = shift;
return $self->search( {}, { 'order_by' => 'username DESC' } );
}
package My::Schema::Users;
use base 'DBIx::Class';
__PACKAGE__->load_components(";Core";);
__PACKAGE__->table(";users";);
__PACKAGE__->add_columns(qw/id username/);
__PACKAGE__->set_primary_key(";id";);
__PACKAGE__->resultset_class('My::ResultSet::Users');
package My::Schema;
use base qw/DBIx::Class::Schema/;
__PACKAGE__->load_classes(qw/Users/);
}
my $schema = My::Schema->connect('dbi:SQLite:db.db');
my $rs = $schema->resultset('Users');
$rs->create( { username => ";user$_"; } ) for ( 1 .. 9 );
{
my $users = $rs->search( {} );
while ( my $user = $users->next ) {
print $user->username, ";\n";;
}
}
{
my $users = $rs->search_ordered_desc;
while ( my $user = $users->next ) {
print $user->username, ";\n";;
}
}
つまり、DBIx::Class::ResultSetを継承したクラスを用意してresultset_class()でロードしてやる感じです。
追記: タイトルがResultManagerになってました。もちろんResultSetManagerの間違いです。




