我想在我的项目中应用搜索过滤器。我有选项表,其中使用父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)));
答案 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);