0

所以我正在使用(非常棒的)Cake DC Search 插件。除其他外,我想要一个“最小”和“最大”输入,并搜索“数量”在“最小”和“最大”范围内的记录,如果两者都设置了,或者大于/小于最小/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. 找到更优雅的解决方案。搜索插件有什么办法解决这个问题吗?您可以将其设置为使两个字段共享一个共同的 filterArgs 方法,以便它只被调用一次吗?

提前致谢。

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

4

1 回答 1

0

OK, so it doesn't look like I'll get a proper answer. So, I've gone for option 1 - just leaving the duplicate condition in the query. Apparently MySQL will run a query optimiser prior to executing, and remove the duplicate condition, and so it won't affect speed in any significant way.

于 2012-10-17T03:09:53.943 回答