[Dbix-class] Overriding Standard Methods

John Goulah jgoulah at gmail.com
Wed Dec 3 15:29:09 GMT 2008


On Wed, Dec 3, 2008 at 10:19 AM, Dave Cross <dave at dave.org.uk> wrote:
>
> I think I'm missing something obvious here. Feel free to point out my
> stupidity.
>
> I have a set of DBIC classes that have been generated by Schema::Loader.
> I want to overload the "delete" method so that instead of actually
> deleting the row the deleted flag gets set to true[1].
>
> I can add a method to the class like this:
>
> sub rm {
>  my $self = shift;
>
>  $self->deleted(1);
>  $self->update;
> }
>
> and call "rm" instead of "delete". Then everything works. But I don't
> want to call the method "rm", I want to call it "delete". If I call it
> delete, then my method doesn't get called. It goes into
> DBIx::Class::Relationship::CascadeActions::delete and that passes
> control to DBIx::Class::Row::delete - completely missing my method.
>
> What am I missing?
>
> Cheers,
>
> Dave...
>
> [1] Yes, this should be a trigger. But triggers are banned from this
> database.
>


This should work:

sub delete {
     my $self = shift;
     # do stuff
     return $self->next::method(@_);
}



More information about the DBIx-Class mailing list