diff --git a/model/Versioned.php b/model/Versioned.php index 623dc959f..aa854d79f 100644 --- a/model/Versioned.php +++ b/model/Versioned.php @@ -577,9 +577,18 @@ class Versioned extends DataExtension implements TemplateGlobalProvider { // Add any extra, unchanged fields to the version record. $data = DB::prepared_query("SELECT * FROM \"$table\" WHERE \"ID\" = ?", array($recordID))->record(); - if($data) foreach($data as $k => $v) { - if (!isset($newManipulation['fields'][$k])) { - $newManipulation['fields'][$k] = $v; + + if ($data) { + $fields = DataObject::database_fields($table); + + if (is_array($fields)) { + $data = array_intersect_key($data, $fields); + + foreach ($data as $k => $v) { + if (!isset($newManipulation['fields'][$k])) { + $newManipulation['fields'][$k] = $v; + } + } } } diff --git a/tests/model/VersionedTest.php b/tests/model/VersionedTest.php index 30dd9dabd..746e57c49 100644 --- a/tests/model/VersionedTest.php +++ b/tests/model/VersionedTest.php @@ -720,6 +720,19 @@ class VersionedTest extends SapphireTest { $this->assertRecordHasLatestVersion($record, 2); } + public function testVersionedHandlesRenamedDataObjectFields(){ + Config::inst()->remove('VersionedTest_RelatedWithoutVersion','db','Name','Varchar'); + + Config::inst()->update('VersionedTest_RelatedWithoutVersion','db',array( + "NewField" => "Varchar", + )); + + VersionedTest_RelatedWithoutVersion::add_extension("Versioned('Stage', 'Live')"); + $this->resetDBSchema(true); + $testData = new VersionedTest_RelatedWithoutVersion(); + $testData->NewField = 'Test'; + $testData->write(); + } }