CakeDC搜索插件产生重复条件

时间:2012-10-10 02:45:31

标签: cakephp cakephp-2.2 cakedc

所以我正在使用(非常棒的)Cake DC Search插件。除此之外,我想要一个'min'和'max'输入,并搜索'amount'在'min'和'max'之内的记录,如果两者都设置,或者大于/小于min / max如果只设置了一个。

我已经完成了工作 - 唯一的问题是条件在SQL查询中被包含两次。很明显为什么......这是我的模型代码:

public $filterArgs = array(
    'range_min' => array('type' => 'query', 'method' => 'findByAmountRange'),
    'range_max' => array('type' => 'query', 'method' => 'findByAmountRange'),
    // Other rules go here
);


public function findByAmountRange($data = array()) {
    // Returns a condition something like 'Model.amount BETWEEN 1 and 100'
}

因为$ filterArgs的'range_min'和'range_max'键都使用相同的方法(findByAmountRange),所以条件被包含两次。

所以,有三种解决方案:

  1. 不要担心,让条件存在两次

  2. 在模型中创建一个实例变量,比如findByAmountRangeHasBeenCalled,并在第一次调用该方法时将其设置为true,因此我们知道将来不再调用它

  3. 寻找更优雅的解决方案。 Search插件有什么方法可以解决这个问题吗?你可以设置它使两个字段共享一个共同的filterArgs方法,这样它只被调用一次吗?

  4. 提前致谢。

    PS - 我知道搜索插件的测试用例包括“制作范围条件”示例,但这不是我想要的 - 我想要两个字段,用户可以输入两个字段。

1 个答案:

答案 0 :(得分:0)

好的,所以看起来我没有得到正确答案。所以,我已经选择了选项1 - 只是在查询中保留重复条件。显然MySQL将在执行之前运行查询优化器,并删除重复条件,因此它不会以任何显着的方式影响速度。