[Dbix-class] How to find updated fields

Guillermo Roditi groditi at gmail.com
Fri Mar 23 14:19:01 GMT 2007


ehh, that wasn't exactly meant to be complete code there, hence the "eg"

That's the code I would recommend using for a DBIx::Class component,
which you would have to build, then load. this is a lot simpler than
it seems. see DBIx::Class::DigestColumns on the 'pan for an example of
how to build a DBIC component.
I can't really go through this exercise with you, but I assure you
it's not ThatHard. it just takes some diving in.

- make component
- use code i provided for update
- insert and delete are an exercise to the reader
- so is resultset->update (hint: custom RS class + overloads)
- load the component in your schema files
- report back here or send it to the 'pan (opt.)

On 3/23/07, RA Jones <ra.jones at dpw.clara.co.uk> wrote:
> Guillermo Roditi wrote:
> > I think you could possibly implement this as a component that wraps
> > update, delete, or insert and the use get_dirty_columns et al.
> >
> > eg
> >
> > sub update{
> >    my ( $self, $upd, @rest ) = @_;
> >    my %cols = $obj->get_dirty_columns;
> >    %cols = (%cols, %$upd) if( ref $upd );
> >    warn( "Updated: ". join(", ", keys %cols)  );
> >    $self->next::method($upd, @rest);
> > }
>
> Well I cannot get this to work. I'm using catalyst and formbuilder, and
> doing the update like:
>
> $form->update($fields);
>
> That works OK, but if I try to capture the result of the action:
>
> my $r = $form->update($fields);
>
> and dump $r to file, get_dirty_columns does not exist, the closest is
> _dirty_columns which is an undefined hashref:
>
> $VAR1 = bless( {
>    'related_resultsets' => {},
>    '_orig_ident' => undef,
>    '_dirty_columns' => {},
>    etc,
>
> Am I missing something obvious here?
>
> > On 3/22/07, RA Jones <ra.jones at dpw.clara.co.uk> wrote:
> >> Rob Kinyon wrote:
> >> > On 3/22/07, RA Jones <ra.jones at dpw.clara.co.uk> wrote:
> >> >> In my applications I frequently record in a log file which fields
> >> >> were updated by which users. Is there an easy way in DBIC to find
> >> >> out which fields got updated during an update() or
> >> >> update_or_insert() action? Thanks.
> >> >
> >> > Look for the get_dirty_columns() method on the Row object.
> >> Thanks, I had just scanned the DBIC::Row manual, and managed to miss
> >> that one - is_changed() looked promising, but it appears to be only for
> >> uncommitted changes.
> >> --
> --
> Richard Jones
> Leeds, UK
> ra.jones(at)dpw.clara.co.uk
>
> _______________________________________________
> List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
> Wiki: http://dbix-class.shadowcatsystems.co.uk/
> IRC: irc.perl.org#dbix-class
> SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
> Searchable Archive: http://www.mail-archive.com/dbix-class@lists.rawmode.org/
>



More information about the Dbix-class mailing list