使用动态选项在cakephp中搜索过滤器

时间:2014-09-23 11:07:38

标签: php mysql cakephp filter

我想在我的项目中应用搜索过滤器。我有选项表,其中使用父ID为选项id的选项值保存选项。例如,品牌保存为选项,父ID设置为0,所有品牌都将品牌ID作为其父ID设置,同时保存产品我在product_options表中保存产品选项。现在我想在产品列表页面中应用过滤器。我正在使用以下代码进行过滤:

$conditions = array();
$product_options = $this->ProductOption->find('list',array('fields'=>array('product_id'),'conditions'=>array('ProductOption.option_value_id'=>$data['data']['options'])));

$conditions = array_merge($conditions,array('Product.id'=>array_unique($product_options)));
$prod_info = $this->paginate('Product',$conditions);
$this->set(compact('prod_info'));   

当我搜索任何带有品牌名称的产品时,它可以正常工作,但如果我尝试使用价格(也是一个选项)进行搜索,那么它还会提供价格等于过滤价格选项的其他品牌产品。请检查以下链接以正确理解问题。

http://primemart.in/Food-Processors-Ii4zRGAKYAo=

请有人帮我解决我的问题。 感谢。

请查看我用于传递条件并获得结果的代码

$product_options = $this->ProductOption->find('list',array(
    'fields'=>array('product_id'),
    'conditions'=>array('ProductOption.option_value_id'=>$data['data']['options'])
));
//$this->Option->unBindModel(array('belongsTo'=>'Product'));
$product_options = $this->Option->find('all', array(
    'conditions'=>array('Option.id'=>$data['data']['options'])
));
//pr($product_options);
$opt_arr = array();

foreach ($product_options as $op) {
    $opt_arr[$op['Option']['parent_id']][] = $op['Option']['id'];
}
$conditions_arr = array();  

foreach($opt_arr as $opt) {
    $key_arr = array();
    foreach($opt as $op) {
        $key_arr['OR']['ProductOption.option_value_id'][] = $op;                        
    }
    $conditions_arr['AND'][] = $key_arr;
}                   
$pr_options = $this->ProductOption->find('list', array(
    'conditions'=>$conditions_arr,
    'fields'=>array('product_id')
));                 
$conditions = array_merge($conditions, array('Product.id'=>array_unique($pr_options))); 

1 个答案:

答案 0 :(得分:1)

我会尝试下面的代码。我假设$条件包含你在问题中提到的其他条件。

$conditions = ... // other conditions you mentioned 

$conditions = array('AND'=>array($conditions, array('Product.id'=>array_unique($product_options))));
$prod_info = $this->paginate('Product',$conditions);