1

Cakedc の「間」の例を使用したいのですが、意味がわかりません。

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

テーブルにフィールド qca_start があり、ユーザーに 2 つの値 (from、to) を入力してもらい、from と to の間で 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です。

私のモデルで

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 を検索値 1 と 2 の間にしたい。

手伝ってくれますか?

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 つの値の配列を返します。

したがって、メソッドで 2 つの値を返すだけです。

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

彼らは自動的に2つを置き換えますか?ではこの順番で。

于 2013-01-23T09:01:54.987 に答える