[Dbix-class] Is it possible to use "dumb" result classes with DBIx::Class?

Will Crawford billcrawford1970 at gmail.com
Thu Apr 9 15:01:44 GMT 2015


Ignore me, -EINSUFFICIENTCAFFEINE. Of course you need to class the returned
objects ...


On 9 April 2015 at 15:57, Will Crawford <billcrawford1970 at gmail.com> wrote:

> You _should_ just be able to subclass the HRI class and add those methods
> (and pass { result_class => 'My::HRI::Subclass' } in for the RS
> attributes). I haven't tested this, will do in a moment :)
>
> On 9 April 2015 at 14:58, Lasse Makholm <lasse at unity3d.com> wrote:
>
>> I'm using DBIx::Class::ResultClass::HashRefInflator in some places where
>> full row object inflation is too slow. That's fine.
>>
>> What I'd really like to do though, is bless the resulting hashrefs into a
>> "light weight" result class that provides a few convenience methods but
>> knows little to nothing about DBIx::Class.
>>
>> Trying something like:
>>
>> my $rs = $schema->resultset('MyTable')->search(...);
>> $rs->result_class('MyApp::Schema::DumbResult::MyTable');
>> while (my $thingy = $rs->next) {
>>
>> # do, do, do
>>
>> }
>>
>>
>> with something like:
>>
>> package MyApp::Schema::DumbResult::MyTable;
>>
>> use strict;
>> use warnings;
>>
>> use DBIx::Class::ResultClass::HashRefInflator;
>>
>> sub inflate_result
>> {
>> my $class = shift;
>> my $result =
>> DBIx::Class::ResultClass::HashRefInflator->inflate_result(@_);
>> return bless $result, $class;
>> }
>>
>> sub TO_JSON
>> {
>> my $self = shift;
>> return { %$self };
>> }
>>
>> 1;
>>
>>
>> ...breaks for a variety of reasons it seems, because DBIx::Class wants to
>> do things like setting a result source instance on the result object, etc...
>>
>> Is there an (easy) make this work? Or is it just in general a horrible
>> idea?
>>
>> Of course I can just do:
>>
>> $rs->result_class('DBIx::Class::ResultClass::HashRefInflator');
>> my @stuff = map { bless $_, MyApp::Schema::DumbResult::MyTable }
>> $rs->all;
>>
>> ...but the other way is more convenient...
>>
>> Or is it more sane to subclass the ResultSet and override first(), all()
>> and next() to set the result_class and bless the resulting hashrefs?
>>
>> Any input appreciated?
>>
>> /L
>>
>>
>>
>> _______________________________________________
>> List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
>> IRC: irc.perl.org#dbix-class
>> SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
>> Searchable Archive:
>> http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.scsys.co.uk/pipermail/dbix-class/attachments/20150409/0b6104aa/attachment.htm>


More information about the DBIx-Class mailing list