fixed nested updates and column accessor != name
Alexander Hartmaier [Mon, 2 Aug 2010 16:44:53 +0000 (18:44 +0200)]
lib/Catalyst/Controller/DBIC/API.pm

index 061dbb3..e53ba6a 100644 (file)
@@ -734,7 +734,15 @@ sub update_object_from_params
         {
             $self->update_object_relation($c, $object, delete $params->{$key}, $key);
         }
-        $object->$key($value);
+        # accessor = colname
+        elsif ($object->can($key)) {
+            $object->$key($value);
+        }
+        # accessor != colname
+        else {
+            my $accessor = $object->result_source->column_info($key)->{accessor};
+            $object->$accessor($value);
+        }
     }
 
     $object->update();
@@ -754,7 +762,19 @@ sub update_object_relation
     if ($row) {
         foreach my $key (keys %$related_params) {
             my $value = $related_params->{$key};
-            $row->$key($value);
+            if (ref($value) && !(reftype($value) eq reftype(JSON::Any::true)))
+            {
+                $self->update_object_relation($c, $row, delete $related_params->{$key}, $key);
+            }
+            # accessor = colname
+            elsif ($object->can($key)) {
+                $object->$key($value);
+            }
+            # accessor != colname
+            else {
+                my $accessor = $object->result_source->column_info($key)->{accessor};
+                $object->$accessor($value);
+            }
         }
         $row->update();
     }