Herkum has asked for the wisdom of the Perl Monks concerning the following question:

I was looking to DBIx::Class to work with my database. The one thing I would like to change is the accessor/mutators that it auto generates. Instead of the typical,

# Accessor method $object->username; # mutator method $object->username('bob');

I want to methods that begin with 'get_' or 'set_' (depending on their functionality).

# Accessor method $object->get_username; # mutator method $object->set_username('bob');

Has anyone done anything for this for DBIx::Class?

Update:

I posted to the DBIx mailing list and here is a solution provided by 'Matt Trout' which is what I think I will go with...

No, because we're perl programmers, not Java programmers :) But it's not hard - you want to override register_column. Something li +ke sub register_column { my $class = shift; my ($col, $info) = @_; $info->{accessor} = undef; $class->mk_group_ro_accessors($col => "get_$col"); $class->mk_group_wo_accessors($col => "set_$col"); $class->next::method(@_); } should do the trick fine.

Replies are listed 'Best First'.
Re: DBIx::Class creating get_* and set_* methods
by LTjake (Prior) on Feb 08, 2008 at 03:10 UTC

    Unfortunately, I don't know of anything off-hand that will give you that effect. DBIC has an accessor "property" for each column, but that simply lets you rename the generated accessor .

    Perhaps you should ping the DBIC list about your question?

    --
    "Go up to the next female stranger you see and tell her that her "body is a wonderland."
    My hypothesis is that she’ll be too busy laughing at you to even bother slapping you.
    " (src)

      I noticed the accessor "property" too. The more I looked around, the more I noticed that ALL the ORM solutions seemed to use the same solution for auto-generating accessors.

      I was hoping someone had taken a look at 'scratching' that itch. but I might be out of luck.

      I will post to mailing list and maybe someone will have a solution

Re: DBIx::Class creating get_* and set_* methods
by emazep (Priest) on Feb 08, 2008 at 06:39 UTC
    DBIx::Class offers also the set_column and get_column accessors:
    $person->set_column('name', 'John'); $name = $person->get_column('name');
    It's not exactly what you were asking for, but just in case you feel more comfortable with the get/set prefixes anyway ;-)

    Update

    It must be specified that they don't have exactly the same semantics of the generated accessors (see the jrockway's reply and the DBIx::Class docs.)

    Cheers,
    Emanuele.
      Never use get_column and set_column directly unless you know what the side-effects are. They don't work the same way as using the accessors. Inflation is skipped, resultsets are not returned for relationships, etc.
        Never use get_column and set_column directly unless you know what the side-effects are.
        I would rather say "the absence of side-effects" ;-)
        (That's exactly why I often use them and I find them perfectly adequate to get the columns raw values.)

        Anyway you are right, I should have specified that's not exactly the same semantics of the generated accessors.

        Cheers,
        Emanuele.
Re: DBIx::Class creating get_* and set_* methods
by peterdragon (Beadle) on Feb 08, 2008 at 07:56 UTC
Re: DBIx::Class creating get_* and set_* methods
by Khen1950fx (Canon) on Feb 08, 2008 at 12:37 UTC