传递所有参数的 Silverstripe 自定义搜索 URL

Silverstripe custom search URL that passes all of its parameters

它是return单独的结果,更多的组合不是return的结果。

执行搜索时,我得到了各个字段的结果,而不是为两个都没有结果设置了值。我怎样才能同时获得两者?

我的错误是什么?感谢帮助

在我使用的搜索表单中 SliderField

class HomePage_Controller extends Page_Controller {

//...

public function index(SS_HTTPRequest $request) 
{  
        $properties = Solutions::get();

        if($visibility = $request->getVar('Visibility')) 
        {

            $properties = $properties->filter(array(
                'Solution:ExactMatch' => array('Visibility'),
                'Score:LessThanOrEqual' => $visibility
            ));
        }

        if($traffic = $request->getVar('Traffic')) 
        {

            $properties = $properties->filter(array(
                'Solution:ExactMatch' => array('Traffic'),
                'Score:LessThanOrEqual' => $traffic
            ));
        }

        return array 
        (
            'Results' => $properties->sort(array('Score' => 'DESC', 'Solution' => 'ASC'))
        );
}

public function SolutionForm() 
{

    $form = Form::create(
        $this,
        __FUNCTION__,
        FieldList::create(
            SliderField::create('Visibility','', 0, 100)                 
                ->addExtraClass('range-slider__range')
                ->setAttribute('type', 'range')
                ->setAttribute('min', '0')
                ->setAttribute('max', '100')
                ->setAttribute('step', '25')
                ->setValue('25'),
            SliderField::create('Traffic','', 0, 100)                 
                ->addExtraClass('range-slider__range')
                ->setAttribute('type', 'range')
                ->setAttribute('min', '0')
                ->setAttribute('max', '100')
                ->setAttribute('step', '25')
                ->setValue('0')

        ),
        FieldList::create(
            FormAction::create('doSolutionsSearch','')
                ->setUseButtonTag(true)
                ->setTitle('YOUR SOLUTION')
                ->addExtraClass('button-solution')  
        )
    );

    $form->setFormMethod('GET')
     ->setFormAction($this->Link('#home'))
     ->disableSecurityToken()
     ->loadDataFrom($this->request->getVars());

    return $form;
}}

那是因为如果两个 if 都为真,您的查询将如下所示:

WHERE ("Solutions"."Solution" = 'Visibility')
AND ("Solutions"."Solution" = 'Traffic')

那不会 return 任何东西,因为 Solution 不会同时是可见性 流量。

最简单的解决方案是执行两个查询并将它们合并在一起:

$properties = Solutions::get();
$arrayList = ArrayList::create();

if($visibilityScore = $request->getVar('Visibility')) {
    $arrayList->merge(
        $properties->filter(array(
            'Solution:ExactMatch' => 'Visibility',
            'Score:LessThanOrEqual' => $visibilityScore
        ))->toArray()
    );
}

if($trafficScore = $request->getVar('Traffic')) {
    $arrayList->merge(
        $properties->filter(array(
            'Solution:ExactMatch' => 'Traffic',
            'Score:LessThanOrEqual' => $trafficScore
        ))->toArray()
    );
}

return array(
    'Results' => $arrayList->sort(array(
        'Score' => 'DESC',
        'Solution' => 'ASC'
    ))
);