Orm Silverstripe更改数据列表的类

Orm Silverstripe更改数据列表的类,orm,silverstripe,Orm,Silverstripe,我有一个Holder类,它返回BaseClass类型的数据列表。这些对象实际上是SearchClass对象。如何转换数据列表,以便按SearchClass字段进行筛选 class SearchClass extends BaseClass(){ public static $db = array('myField' => 'Int'); } abstract class Holder{ abstract protected function myList(); } $h

我有一个Holder类,它返回BaseClass类型的数据列表。这些对象实际上是SearchClass对象。如何转换数据列表,以便按SearchClass字段进行筛选

class SearchClass extends BaseClass(){
    public static $db = array('myField' => 'Int');
}

abstract class Holder{
    abstract protected function myList();
}

$holder = new ConcreteHolder();
$holder->myList()->filter('myField',1);
最简单的方法是:

class Holder extends DataObject {
    public function myList(){
        return SearchClass::get()->filter('baseField', 'aValue');
    }
}

再过一会儿,我想出了一个解决办法

public function convert($list){
    $ids = $list->filter('ClassName', 'SearchClass')->getIDList();
    return SearchClass::get->byIDs($ids);
}

返回$list->filter('ClassName','SearchClass');//在特定的类数据库表上有足够的数据列表。因此,Datalist只知道基类属性。Datalist还包括所有子类您将看到它将对表进行连接。您现在正在执行一个不必要的查询。除非您从一开始就以一种奇怪的方式处理数据对象,因为您这样做的查询@Michania1答案是您应该选择的答案;一点您可以使用ModelAdmin来管理数据对象,然后直接使用SearchClass::get()->filter('baseField',aValue')过滤数据对象,而不是通过新的ConcreteHolder();。这可能是一个原因,但只是指出:)