[Dbix-class] using DBIx::Class::CDBICompat

Matt S Trout dbix-class at trout.me.uk
Tue May 22 17:45:20 GMT 2007


On Tue, May 22, 2007 at 12:16:20PM -0400, John Goulah wrote:
> >So I have a function like:
> >>
> >> sub get_some_data : ResultSet {
> >>    my ($self) = @_;
> >>    my $dbh = $self->result_source->schema->storage->dbh;
> >>
> >>    my $sth = $dbh->prepare("select * from sometable");
> >>    $sth->execute();
> >>
> >>    ##### this doesn't work, how do I  use this method?
> >>    return $self->sth_to_objects($sth);
> >
> >You don't. That's a method on a resultset object, and the CDBICompat stuff
> >won't show up there - which is a good thing, since sth_to_objects it
> >pretty
> >horrible since it's a COMPATIBILITY LAYER feature, not a DBIC feature.
> >
> >How about
> >
> >    my @results;
> >    while (my $hr = $sth->fetchrow_hashref) {
> >      push(@results,
> >        $self->result_class->inflate_result(
> >          $self->result_source, $hr, {}
> >        )
> >      );
> >    }
> >    return @results;
> >
> >?
> 
> 
> 
> Yes thats exactly what I was looking for, thank you.  So if I were to want
> this method shared on all my resultset objects, would you suggest creating
> an object that inherits from the ResultSetManager (or somethign similar) and
> putting it in there?

A class that uses base DBIx::Class::ResultSet and then just do

__PACKAGE__->resultset_class('My::ResultSet::Class');

in any table class that needs it. ResultSetManager is just a convenience
syntax to that, and causes enough problems in more complex cases there's
serious consideration being given to deprecating it in favour of saner
syntax.

-- 
      Matt S Trout       Need help with your Catalyst or DBIx::Class project?
   Technical Director    Want a managed development or deployment platform?
 Shadowcat Systems Ltd.  Contact mst (at) shadowcatsystems.co.uk for a quote
http://chainsawblues.vox.com/             http://www.shadowcatsystems.co.uk/ 



More information about the Dbix-class mailing list