[Dbix-class] Defaulting cascade actions to false

Matt S Trout dbix-class at trout.me.uk
Tue Apr 21 12:12:17 GMT 2009


On Tue, Apr 21, 2009 at 01:48:19AM -0700, Ovid wrote:
> 
> Hi all,
> 
> I need to be able to globally set these attributes on on those resultsource methods which accept them:
> 
>   {
>     cascade_delete => 0,
>     cascade_update => 0,
>   }
> 
>  
> It seems like this is being handled on a method by method basis (see &DBIx::Class::Relationship::HasOne::_has_one for an example), but the code is dense enough (or I am) that I'm not seeing if there is some simple way of overriding this behavior.  Right now we're hardcoding this for every single has_one, has_many, belongs_to, etc., and this is leading to unecessary code bloat (and in one case, a bug where a developer forgot to explicitly add this).  I know how to override this in our base class, but if there's is an "official" way of handling this, it would be nice to see.

you should be able to override just add_relationship. Something like -

my %force = map ($_ => 0), qw(cascade_update cascade_delete);

sub add_relationship {
  my ($self, $name, $foreign, $join, $attrs) = @_;
  $self->next::method($name, $foreign, $join, { %$attrs, %force });
}

A cookbook entry or similar for this would be much appreciated.

-- 
      Matt S Trout       Need help with your Catalyst or DBIx::Class project?
   Technical Director                    http://www.shadowcat.co.uk/catalyst/
 Shadowcat Systems Ltd.  Want a managed development or deployment platform?
http://chainsawblues.vox.com/            http://www.shadowcat.co.uk/servers/



More information about the DBIx-Class mailing list