Merge pull request #5592 from silverstripe-terraformers/fixes/diff-dbfield-check

Adjusted dbObject order of execution and make ignoreFields chainable
This commit is contained in:
Daniel Hensby 2016-08-01 14:10:24 +01:00 committed by GitHub
commit 59bba54b30
2 changed files with 15 additions and 10 deletions

View File

@ -2954,24 +2954,27 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
* @return DBField The field as a DBField object * @return DBField The field as a DBField object
*/ */
public function dbObject($fieldName) { public function dbObject($fieldName) {
// Check for field in DB
$helper = $this->db($fieldName, true);
if(!$helper) {
return null;
}
$value = isset($this->record[$fieldName]) $value = isset($this->record[$fieldName])
? $this->record[$fieldName] ? $this->record[$fieldName]
: null; : null;
// If we have a DBField object in $this->record, then return that // If we have a DBField object in $this->record, then return that
if(is_object($value)) { if($value instanceof DBField) {
return $value; return $value;
} }
// Build and populate new field otherwise list($table, $spec) = explode('.', $helper);
$helper = $this->db($fieldName, true); $obj = Object::create_from_string($spec, $fieldName);
if($helper) { $obj->setTable($table);
list($table, $spec) = explode('.', $helper); $obj->setValue($value, $this, false);
$obj = Object::create_from_string($spec, $fieldName); return $obj;
$obj->setTable($table);
$obj->setValue($value, $this, false);
return $obj;
}
} }
/** /**

View File

@ -75,6 +75,8 @@ class DataDifferencer extends ViewableData {
public function ignoreFields($ignoredFields) { public function ignoreFields($ignoredFields) {
if(!is_array($ignoredFields)) $ignoredFields = func_get_args(); if(!is_array($ignoredFields)) $ignoredFields = func_get_args();
$this->ignoredFields = array_merge($this->ignoredFields, $ignoredFields); $this->ignoredFields = array_merge($this->ignoredFields, $ignoredFields);
return $this;
} }
/** /**