X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FRelationship%2FBase.pm;h=9ad86d6cb8c1c8e2dbef68c4909a7faa675e345b;hb=370f2ba2727791641c350a20e4fd09469503dbae;hp=c0c74c78e2581933093b567f65f4aea793cf9ab1;hpb=aed5b8a46a2e48adeeb790c06906c4d48f190043;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Relationship/Base.pm b/lib/DBIx/Class/Relationship/Base.pm index c0c74c7..9ad86d6 100644 --- a/lib/DBIx/Class/Relationship/Base.pm +++ b/lib/DBIx/Class/Relationship/Base.pm @@ -109,6 +109,19 @@ is creating constraints where it shouldn't, or not creating them where it should, set this attribute to a true or false value to override the detection of when to create constraints. +=item on_delete / on_update + +If you are using L to create SQL for you, you can use these +attributes to explicitly set the desired C or C constraint +type. If not supplied the SQLT parser will attempt to infer the constraint type by +interrogating the attributes of the B relationship. For any 'multi' +relationship with C<< cascade_delete => 1 >>, the corresponding belongs_to +relationship will be created with an C constraint. For any +relationship bearing C<< cascade_copy => 1 >> the resulting belongs_to constraint +will be C. If you wish to disable this autodetection, and just +use the RDBMS' default constraint type, pass C<< on_delete => undef >> or +C<< on_delete => '' >>, and the same for C respectively. + =item is_deferrable Tells L that the foreign key constraint it creates should be @@ -116,6 +129,12 @@ deferrable. In other words, the user may request that the constraint be ignored until the end of the transaction. Currently, only the PostgreSQL producer actually supports this. +=item add_fk_index + +Tells L to add an index for this constraint. Can also be +specified globally in the args to L or +L. Default is on, set to 0 to disable. + =back =head2 register_relationship @@ -171,11 +190,18 @@ sub related_resultset { $rel_obj->{cond}, $rel, $self ); if (ref $cond eq 'ARRAY') { - $cond = [ map { my $hash; - foreach my $key (keys %$_) { - my $newkey = $key =~ /\./ ? "me.$key" : $key; - $hash->{$newkey} = $_->{$key}; - }; $hash } @$cond ]; + $cond = [ map { + if (ref $_ eq 'HASH') { + my $hash; + foreach my $key (keys %$_) { + my $newkey = $key =~ /\./ ? "me.$key" : $key; + $hash->{$newkey} = $_->{$key}; + } + $hash; + } else { + $_; + } + } @$cond ]; } else { foreach my $key (grep { ! /\./ } keys %$cond) { $cond->{"me.$key"} = delete $cond->{$key}; @@ -208,7 +234,7 @@ sub search_related { ( $objects_rs ) = $rs->search_related_rs('relname', $cond, $attrs); This method works exactly the same as search_related, except that -it garauntees a restultset, even in list context. +it guarantees a restultset, even in list context. =cut @@ -435,7 +461,7 @@ B relationships.> my $actor = $schema->resultset('Actor')->find(1); my @roles = $schema->resultset('Role')->search({ role => - { '-in' -> ['Fred', 'Barney'] } } ); + { '-in' => ['Fred', 'Barney'] } } ); $actor->set_roles(\@roles); # Replaces all of $actor's previous roles with the two named