Silverstripe 更改 DataList 的 class

Silverstripe changing the class of a DataList

我有一个 Holder class returns 一个 BaseClass 类型的 DataList。这些对象实际上是 SearchClass 对象。如何转换 DataList 以便我可以按 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);
}