mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-05 07:38:26 +02:00
Merge pull request #3804 from kinglozzer/3802-dataobject-db
FIX: DataObject::db returned fields in incorrect order, with incorrect data types
This commit is contained in:
commit
bf4c9fcd50
@ -1666,9 +1666,14 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
|
|||||||
*/
|
*/
|
||||||
public function db($fieldName = null) {
|
public function db($fieldName = null) {
|
||||||
$classes = ClassInfo::ancestry($this, true);
|
$classes = ClassInfo::ancestry($this, true);
|
||||||
$items = array();
|
|
||||||
|
|
||||||
foreach(array_reverse($classes) as $class) {
|
// If we're looking for a specific field, we want to hit subclasses first as they may override field types
|
||||||
|
if($fieldName) {
|
||||||
|
$classes = array_reverse($classes);
|
||||||
|
}
|
||||||
|
|
||||||
|
$items = array();
|
||||||
|
foreach($classes as $class) {
|
||||||
if(isset(self::$_cache_db[$class])) {
|
if(isset(self::$_cache_db[$class])) {
|
||||||
$dbItems = self::$_cache_db[$class];
|
$dbItems = self::$_cache_db[$class];
|
||||||
} else {
|
} else {
|
||||||
|
@ -38,9 +38,19 @@ class DataObjectTest extends SapphireTest {
|
|||||||
$this->assertEquals('Text', $obj->db('Comment'));
|
$this->assertEquals('Text', $obj->db('Comment'));
|
||||||
|
|
||||||
$obj = new DataObjectTest_ExtendedTeamComment();
|
$obj = new DataObjectTest_ExtendedTeamComment();
|
||||||
|
$dbFields = $obj->db();
|
||||||
|
|
||||||
// Assert overloaded fields have correct data type
|
// Assert overloaded fields have correct data type
|
||||||
$this->assertEquals('HTMLText', $obj->db('Comment'));
|
$this->assertEquals('HTMLText', $obj->db('Comment'));
|
||||||
|
$this->assertEquals('HTMLText', $dbFields['Comment'],
|
||||||
|
'Calls to DataObject::db without a field specified return correct data types');
|
||||||
|
|
||||||
|
// assertEquals doesn't verify the order of array elements, so access keys manually to check order:
|
||||||
|
// expected: array('Name' => 'Varchar', 'Comment' => 'HTMLText')
|
||||||
|
reset($dbFields);
|
||||||
|
$this->assertEquals('Name', key($dbFields), 'DataObject::db returns fields in correct order');
|
||||||
|
next($dbFields);
|
||||||
|
$this->assertEquals('Comment', key($dbFields), 'DataObject::db returns fields in correct order');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testValidObjectsForBaseFields() {
|
public function testValidObjectsForBaseFields() {
|
||||||
|
Loading…
Reference in New Issue
Block a user