1

我想使用 cakedc 中的“介于”示例,但无法理解。

'range' => array('type' => 'expression', 'method' => 'makeRangeCondition', 'field' => 'Article.views BETWEEN ? AND ?'),

我的表中有字段 qca_start 并希望用户提供两个值(从,到)并在从和到之间搜索 qca_start。

我的控制器:(我使用其他更简单的搜索没有问题。(employee_id 在这里工作得很好)

public $presetVars = array(
    array('field' => 'employee_id', 'type' => 'value'),
    array('field' => 'qca_start', 'type' => 'value') // not sure what type to use here for between search.

}; 我表上的字段是 qca_start,而不是用户我将如何为此命名 presetVar?

在我的模型上

public $filterArgs = array(
array('name' => 'employee_id', 'type' => 'value'),
    'range' => array('type' => 'expression', 'method' => 'makeRangeCondition', 'field' => 'Article.views BETWEEN ? AND ?'),

);

我不知道如何为 filterArgs 格式化:

'range' => array('type' => 'expression', 'method' => 'makeRangeCondition', 'field' => 'Article.views BETWEEN ? AND ?'),

我希望 qca_start 介于搜索值一和二之间。

你能帮我吗?

4

2 回答 2

1

从我给@CakeDC Plugin Search Between Dates的答案中复制/粘贴

在模型中:

        'creationDateBetween'       => array(
            'type'      => 'expression',
            'method'    => 'CreationDateRangeCondition',
            'field'     => 'MODEL.creationdate BETWEEN ? AND ?',
        ),

public function CreationDateRangeCondition($data = array()){
    if(strpos($data['creationDateBetween'], ' - ') !== false){
        $tmp = explode(' - ', $data['creationDateBetween']);
        $tmp[0] = $tmp[0]."-01-01";
        $tmp[1] = $tmp[1]."-12-31";
        return $tmp;
    }else{
        return array($data['creationDateBetween']."-01-01", $data['creationDateBetween']."-12-31");
    }
}

在视图中:请注意,我使用的是年份范围的滑块

    echo $this->Form->input('creationDateBetween', 
    array(
        'label'     => __('Creation date between X and Y'),
        'div'       => false,
        'style' => 'border: 0; color: #49AFCD; font-weight: bold;'
    )
);

?><div id="creationDateBetweenSlider" style="padding:0;"></div><?php

<script>
$(function() {


    var     creationDateBetweenSlider = $( "#creationDateBetweenSlider" ),
        institutionCreationDateBetween  = $( "#MODELCreationDateBetween" ), 

lock = 0;

creationDateBetweenSlider.slider({
                range: true,
                min: 1900,
                max: 2050,
                values: [ 2000, 2013 ],
                slide: function( event, ui ) {
                    MODELCreationDateBetween.val(  ui.values[ 0 ] + " - " + ui.values[ 1 ] );
                }
            });
        if(lock != 0) MODELCreationDateBetween.val( creationDateBetweenSlider.slider( "values", 0 ) + " - " + creationDateBetweenSlider.slider( "values", 1 ) );

lock = 1;

    });
</script>

等待反馈,看看它是否适合你;)

于 2013-02-26T21:41:47.870 回答
0

您应该阅读文档@ https://github.com/cakedc/search

如果您想添加将由某种方法生成的条件,“表达式”类型很有用,并且条件字段包含几个参数,就像前面用于“范围”的示例一样。这里的字段包含 'Article.views BETWEEN ? 和 ?' 和Article::makeRangeCondition 返回两个值的数组

因此,只需在您的方法中返回 2 个值:

public function makeRangeCondition() {
    ...
    return array($from, $to);
}

他们会自动替换这两个?然后按这个顺序。

于 2013-01-23T09:01:54.987 回答