2014-09-23 57 views
0

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

$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))); 
+0

我想查询形成了OR条件,而你需要AND在你的查询。您可以将条件与AND结合起来以获得所需的结果。 – cartina 2014-09-23 11:42:44

+0

@cartina我也试过使用AND条件。但是这仍然不起作用。 – 2014-09-23 12:18:31

+2

告诉我们您是怎么尝试使用AND – scx 2014-09-23 12:23:39

回答

1

我会努力码波纹管。我假设$条件是你在问题中提到的其他条件的一部分。

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

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

我试过你的代码,但不幸的是这不工作.. :( – 2014-09-23 12:41:57