SearchContext - 使用1个表单搜索多个DataObjects?

时间:2013-08-29 12:17:32

标签: silverstripe

我有3个数据对象,我想搜索相同的4个字段。

是否可以一次搜索所有这些表单,或者我是否必须使用3种不同的搜索表单?

在我的网页类型中使用以下文档中的基本代码,我想搜索:

public function DataObjectSearch() {
    $context = singleton('DataObject1')->getCustomSearchContext();
    $fields = $context->getSearchFields();
    $form = new Form($this, "DataObjectSearch",
        $fields,
        new FieldList(
            new FormAction('doSearch')
        )
    );
    return $form;
}


public function doSearch($data, $form) {
    $context = singleton('Dataobject1')->getCustomSearchContext();
    $results = $context->getResults($data);
    return $this->customise(array(
        'Results' => $results
    ))->renderWith('DataObject1Template');
}

1 个答案:

答案 0 :(得分:0)

从来没有真正使用过这个,但我想如果您的DataObjects具有相同的字段,您可以多次调用getResults()函数并将它们合并在一起。

public function doSearch($data, $form)
{
    $context = singleton('Dataobject1')->getCustomSearchContext();
    $results = ArrayList::create( $context->getResults($data)->toArray() );

    $context = singleton('Dataobject2')->getCustomSearchContext();
    $results->merge( $context->getResults($data)->toArray() );

    $context = singleton('Dataobject3')->getCustomSearchContext();
    $results->merge( $context->getResults($data)->toArray() );

    //...and so on....

    return $this->customise(array(
        'Results' => $results
    ))->renderWith('DataObject1Template');
}

getResults()显然会返回DataList,因此会将其转换为ArrayList,以便能够将结果合并在一起。没有测试过这一切,但希望它可以给你指点或想法。