Use the column accessor instead of set_column when inserting new objects
Alexander Hartmaier [Wed, 19 Oct 2011 16:06:05 +0000 (18:06 +0200)]
Changes
lib/Catalyst/Controller/DBIC/API.pm

diff --git a/Changes b/Changes
index 3104b27..f8f469e 100644 (file)
--- a/Changes
+++ b/Changes
@@ -2,7 +2,10 @@ Revision history for Catalyst-Controller-DBIC-API: {{ $dist->version }}
 
 {{ $NEXT }}
 
+- Use the column accessor instead of set_column when inserting new objects
+
 2.004001  2011-08-19 16:17:53 Europe/Vienna
+
 - Changed stored_model and stored_result_source attributes to methods for
   ACCEPT_CONTEXT/Catalyst::Component::InstancePerContext compatibility
 
index 5be5751..03b1f08 100644 (file)
@@ -818,12 +818,18 @@ sub insert_object_from_params
     my ($self, undef, $object, $params) = @_;
 
     my %rels;
-    while (my ($k, $v) = each %{ $params }) {
-        if (ref($v) && !(reftype($v) eq reftype(JSON::true))) {
-            $rels{$k} = $v;
+    while (my ($key, $value) = each %{ $params }) {
+        if (ref($value) && !(reftype($value) eq reftype(JSON::true))) {
+            $rels{$key} = $value;
         }
+        # accessor = colname
+        elsif ($object->can($key)) {
+            $object->$key($value);
+        }
+        # accessor != colname
         else {
-            $object->set_column($k => $v);
+            my $accessor = $object->result_source->column_info($key)->{accessor};
+            $object->$accessor($value);
         }
     }