X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Controller-DBIC-API.git;a=blobdiff_plain;f=lib%2FCatalyst%2FController%2FDBIC%2FAPI.pm;h=e53ba6ab04f599bcd4d301e081aac3641a1d7e26;hp=061dbb3d58971e1b456ebd08641e2844e209e93d;hb=16337d41c09d941da69cc0015345c1a202eae46d;hpb=3b12c2cd6893d11ca090fbd599782f0a27979922 diff --git a/lib/Catalyst/Controller/DBIC/API.pm b/lib/Catalyst/Controller/DBIC/API.pm index 061dbb3..e53ba6a 100644 --- a/lib/Catalyst/Controller/DBIC/API.pm +++ b/lib/Catalyst/Controller/DBIC/API.pm @@ -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(); }