cakeedc搜索插件搜索的价格范围


cakedc search plugin search in price range

我试图使用cakedc搜索插件在两个价格之间搜索,这是我的模型代码:

public $actsAs = array(
    'Search.Searchable'
);
public $filterArgs = array(
    'price' => array(
    'type' => 'expression',
    'method' => 'makeRangeCondition',
    'field' => 'Price.views BETWEEN ? AND ?'
    )
);
   public function makeRangeCondition($data = array()) {
    if (strpos($data['price'], ' - ') !== false){
        $tmp = explode(' - ', $data['price']);
        $tmp[0] = $tmp[0] ;
        $tmp[1] = $tmp[1] ;
        return $tmp;
    } else {
        return array($minPrice, $maxPrice) ;
    }
}

我的控制器代码:

public function index() {
    $this->Prg->commonProcess();
    $cond = $this->Property->parseCriteria($this->passedArgs);
$this->set('properties', $this->paginate('Property', $cond));
}

我的视图代码:

<?php
echo $this->Form->create();
echo $this->Form->input('minPrice');
echo $this->Form->input('maxPrice');
echo $this->Form->submit(__('Submit'));
echo $this->Form->end();

?>

表的sql:

CREATE TABLE IF NOT EXISTS `properties` (

id varchar(36) NOT NULL,price浮动默认NULL,主键( id),唯一键 ID ( id)

将filterArgs中的'range'键命名为'price'。因为只有当data[key]不为空时,插件才会检查键名和调用方法

如果您使用两个输入,您应该在$filterArgs数组中使用两个参数。

你可以在你的Model中试试下面的代码:

public $filterArgs = array(
        'minPrice' => array(
            'type' => 'query',
            'method' => 'priceRangeMin'
        ),
        'maxPrice' => array(
             'type' => 'query',
             'method' => 'priceRangeMax'
        )
    );
public function priceRangeMin( $data = array() ) {
    if( !empty( $data['minPrice'] ) ) {
        return array('Property.price >= '.$data['minPrice'].'');
    }
}
public function priceRangeMax( $data = array() ) {
    if( !empty( $data['maxPrice'] ) ) {
        return array('Property.price <= '.$data['maxPrice'].'');
    }
}

在控制器和视图中也使用相同的代码