所以我正在使用(非常棒的)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),所以条件被包含两次。
所以,有三种解决方案:
不要担心,让条件存在两次
在模型中创建一个实例变量,比如findByAmountRangeHasBeenCalled,并在第一次调用该方法时将其设置为true,因此我们知道将来不再调用它
寻找更优雅的解决方案。 Search插件有什么方法可以解决这个问题吗?你可以设置它使两个字段共享一个共同的filterArgs方法,这样它只被调用一次吗?
提前致谢。
PS - 我知道搜索插件的测试用例包括“制作范围条件”示例,但这不是我想要的 - 我想要两个字段,用户可以输入两个字段。
答案 0 :(得分:0)
好的,所以看起来我没有得到正确答案。所以,我已经选择了选项1 - 只是在查询中保留重复条件。显然MySQL将在执行之前运行查询优化器,并删除重复条件,因此它不会以任何显着的方式影响速度。