in reply to Re: data historization with DBIx::Class
in thread data historization with DBIx::Class

Thanks for your reply - this really looks very promisising.

For my current needs however I may not be able to use it as I am supposed to use only those CPAN-modules that can be found in the ubuntu-repositories.

But be it as it may - is there an easy way in DBIx::Class to create a row belonging to another resultset based on a given resultset that would copy over all shared attributes?

In pseudo-code something like:

my $rs1 = $schema->resultset("table1"); my $rs2 = $schema->resultset("table2"); my $o1 = $rs1->find({ id => $id }); my $o2 = $rs2->create_copy($o1); # does something like this exist?
As a related question I know I can get plain hashes from a resultset with DBIx::Class::ResultClass::HashRefInflator but only when I use it as a setting on the resultset-class.

But how would I convert a row that I have already retrieved, i.e. something like

my $o = $rs1->find({ id => $id }); my $hash_ref = $o->as_hashref; # does this exist?
Many thanks!

Replies are listed 'Best First'.
Re^3: data historization with DBIx::Class
by Your Mother (Archbishop) on Dec 26, 2010 at 18:24 UTC

    As for the last part, check out DBIx::Class::ResultSet::HashRef. You use it as a parent class and then you get a handful of methods like hashref_rs which you can use as the end point of a chain.

    For a similar but heavier (object inflation is more to much more expensive depending on your columns and inflation types) solution you can also rewrite this–

    my $hash_ref = $o->as_hashref; # does this exist?

    –as–

    my $hash_ref = { $o->get_columns };
      Thanks a lot for your reply.

      "get_columns" is what I have been looking for - however I cannot find it in the documentation.

      Is that an offical interface that had not yet been documented or something that could break with the next version?

        The DBIC docs have lately got much better but they are compartmentalized pretty well so you might miss things unless you read the relevant (and sometimes "invisible") class: DBIx::Class::Row. It's been there as long as I can remember and it's not going anywhere.