]> Dogcows Code - chaz/p5-DBIx-Class-ResultSet-RecursiveUpdate/commitdiff
Updated to curren DBIC.
authorzby <zby@bd8105ee-0ff8-0310-8827-fb3f25b6796d>
Tue, 30 Sep 2008 09:29:02 +0000 (09:29 +0000)
committerzby <zby@bd8105ee-0ff8-0310-8827-fb3f25b6796d>
Tue, 30 Sep 2008 09:29:02 +0000 (09:29 +0000)
lib/DBIx/Class/ResultSet/RecursiveUpdate.pm
t/var/dvdzbr.db

index 5934bc4936957a5c2e85fb6514cc3583271cf74d..a176f1f94714ce147d0b823637896e975bf851e3 100644 (file)
@@ -12,7 +12,8 @@ sub recursive_update {
     my( $self, $updates ) = @_;
     my $object;
     # this is a workaround for a bug in the svn version 4794 
     my( $self, $updates ) = @_;
     my $object;
     # this is a workaround for a bug in the svn version 4794 
-    if ( ref $self->{cond} eq 'ARRAY' and ref $self->{cond}[0] eq 'SCALAR' ){
+#    if ( ref $self->{cond} eq 'ARRAY' and ref $self->{cond}[0] eq 'SCALAR' ){
+    if ( ref $self->{cond} eq 'SCALAR' ){
         $self->{cond} = {};
         $object = $self->new( {} );
     }
         $self->{cond} = {};
         $object = $self->new( {} );
     }
@@ -20,8 +21,10 @@ sub recursive_update {
         $object = $self->find( $updates, { key => 'primary' } ) || $self->new( {} );
     }
 
         $object = $self->find( $updates, { key => 'primary' } ) || $self->new( {} );
     }
 
-    for my $name ( keys %$updates ){ if($object->can($name)){
+    for my $name ( keys %$updates ){ 
+        if($object->can($name)){
             my $value = $updates->{$name};
             my $value = $updates->{$name};
+
             # updating relations that that should be done before the row is inserted into the database
             # like belongs_to
             if( $object->result_source->has_relationship($name) 
             # updating relations that that should be done before the row is inserted into the database
             # like belongs_to
             if( $object->result_source->has_relationship($name) 
@@ -34,7 +37,6 @@ sub recursive_update {
                     _master_relation_cond( $object, $info->{cond}, _get_pk_for_related( $object, $name ) )
                 ){
                     my $related_result = $object->related_resultset( $name );
                     _master_relation_cond( $object, $info->{cond}, _get_pk_for_related( $object, $name ) )
                 ){
                     my $related_result = $object->related_resultset( $name );
-                    $DB::single = 1;
                     my $sub_object = $related_result->recursive_update( $value );
                     $object->set_from_related( $name, $sub_object );
                 }
                     my $sub_object = $related_result->recursive_update( $value );
                     $object->set_from_related( $name, $sub_object );
                 }
@@ -197,12 +199,22 @@ Then:
     put 'undef' for the key value - this is then removed
     and a correct INSERT statement is generated.  
 
     put 'undef' for the key value - this is then removed
     and a correct INSERT statement is generated.  
 
+    For a many_to_many (pseudo) relation you can supply a list of primary keys
+    from the other table - and it will link the record at hand to those and
+    only those records identified by them.  This is convenient for handling web
+    forms with check boxes (or a SELECT box with multiple choice) that let you
+    update such (pseudo) relations.
+
     For a description how to set up base classes for ResultSets see load_namespaces
     in DBIx::Class::Schema.
 
     For a description how to set up base classes for ResultSets see load_namespaces
     in DBIx::Class::Schema.
 
+    The support for many to many pseudo relationships should be treated as prototype -
+    the DBIC author disagrees with the way I did it.
+
+
 =head1 INTERFACE 
 
 =head1 INTERFACE 
 
-=for author to fill in:
+=for uthor to fill in:
 
 =head1 METHODS
 
 
 =head1 METHODS
 
index c4649466382298d8f11feb8f0f2c47f0edd4955e..1b86cea40f1c74a2199cb70b0e1907a6a07ea175 100644 (file)
Binary files a/t/var/dvdzbr.db and b/t/var/dvdzbr.db differ
This page took 0.028713 seconds and 4 git commands to generate.